Как стартовать сессию только для прошедших аутентификацию

Рейтинг: 2Ответов: 3Опубликовано: 04.01.2015

Прошу помощи в связи с возникшей проблемой.

Задача: стартовать сессию только для прошедших аутентификацию с помощью конструкции if (isset($_REQUEST[session_name()])) session_start();

Проблема: после авторизации страница, на которую осуществляется переход, не получает значение $_REQUEST[session_name()]. Точнее говоря, его можно установить только принудительно передав:

$s=session_id();
echo '<a href="/?PHPSESSID=$s">На главную</a>;

Но даже после этого следующая страница, на которую осуществляется переход, опять не видит $_REQUEST[session_name()] с установленным значением.

Вопрос: что можно сделать, чтобы $_REQUEST[session_name()] получал значение без принудительного присвоения вышеописанным способом?

Установкой session.use_cookies = 1 и session.use_trans_sid = 1 (или 0) в php.ini ни на что повлиять не удалось, как и установкой request_order = “GPС” , описанной в статье http://diz-blog.com.ua/request-session-name-empty-what-do.html

Ответы

▲ 1Принят

Замените if (isset($_REQUEST[session_name()])) session_start(); на if ($_COOKIE[session_name()]) session_start();.

▲ 2

Забудьте про передачу сессии в параметрах запроса!
Зная ссылку с сессией (а её сам пользователь может скинуть по неосторожности), любой человек сможет совершать действия от имени этого пользователя.

Лучше почитайте про сессии на оф. сайте https://php.net/manual/ru/intro.session.php

P.S. Есть замечательная суперглобальная переменная $_SESSION, которая позволяет работать с данными в сессии.

▲ 1

Судя по давности вопроса, автор уже разобрался.. Но кому-то может пригодиться. @movak744 прав, $_COOKIE[session_name()] или, на крайний случай, $_GET[session_name()]

P.S. Есть замечательная суперглобальная переменная $_SESSION, которая позволяет работать с данными в сессии.

Шикарный ответ, учитывая, что до старта механизма сессии этот массив будет пустым