Я пытаюсь заставить свой скрипт использовать идентификатор сеанса url вместо файлов cookie. Следующая страница не отображает переменную в URL-адресе как идентификатор сеанса. Я должен что-то упустить.
Первая страница http://www.website.com/start.php
ini_set("session.use_cookies",0); ini_set("session.use_trans_sid",1); session_start(); $session_id = session_id(); header("location: target.php?session_id=". $session_id );
Следующая страница – http://www.website.com/target.php?session_id=rj3ids98dhpa0mcf3jc89mq1t0
ini_set("session.use_cookies",0); ini_set("session.use_trans_sid",1); print_r($_SESSION); print(session_id())
Результат – это другой идентификатор сеанса, и сеанс пуст.
Массив ([debug] => no) pt1t38347bs6jc9ruv2ecpv7o2
будьте осторожны при использовании url для передачи идентификаторов сеанса, что может привести к захвату сеанса через референта!
Похоже, вам просто нужно вызвать session_start () на второй странице.
Из документов:
session_start () создает сеанс или возобновляет текущий на основе текущего идентификатора сеанса, который передается через запрос, например GET, POST или cookie.
РЕДАКТИРОВАТЬ:
Тем не менее, вы также можете попытаться вручную захватить идентификатор сеанса из строки запроса. На второй странице вам нужно будет сделать что-то вроде:
ini_set("session.use_cookies",0); ini_set("session.use_trans_sid",1); session_id($_GET['session_id']); print_r($_SESSION); print(session_id());
Обратите внимание, что функция session_id () будет устанавливать идентификатор, если вы передадите ему идентификатор в качестве параметра.
Вместо 'PHPSESSID'
, используйте это:
session_id($_GET[session_name()]);
Моя проблема заключалась в использовании Flash в FF (как flash piggy backs IE, поэтому сеансы не распространяются между Flash-объектом и firefox)
Используя php 5.3, все эти ответы указывали на правду. То, что я, наконец, нашел для работы, было довольно простым. Передайте идентификатор в строке запроса. Установить его. Затем начните сеанс.
session_id($_GET['PHPSESSID']); session_start();