2010-04-15 1 views
0

Я пытаюсь использовать сеанс PHP без использования файлов cookie. Я включил session.use_trans_sid и отключил session.use_cookies в моем файле php.ini. Я также отключил куки-файлы в моем браузере Firefox. Теперь, когда я перемещаюсь между страницами, я не могу получить доступ к переменной в объекте сеанса, установленном с предыдущей страницы. Кстати, я знаю, что использование идентификаторов сеансов как части URL-адреса не рекомендуется.Невозможно получить доступ к переменной сеанса в cookie меньше сеансов PHP

Я предоставил фрагмент кода примера ниже для двух страниц - page1.php и page2.php. Page1.php устанавливает переменную в объекте session в true и page2.php проверяет значение этой переменной и принимает соответствующие меры.

page1.php

<?php 
session_start(); 
if (isset($_REQUEST["user"])) 
{ 
    $_SESSION["name"] = true; 
    $host = $_SERVER["HTTP_HOST"]; 
    $path = dirname($_SERVER["PHP_SELF"]); 
    header("Location: http://$host$path/page2.php"); 
    exit; 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<title>Page1</title> 
</head> 
<body> 
<form method="get" action="/page1.php"> 
Name:<input type="text" name="user"/><br/> 
<input type="submit" value="Login"/><br/> 
</form> 
</body> 
</html> 

page2.php

<?php 
session_start(); 
if ($_SESSION["name"]) 
{ 
    echo("<h1>Name set.</h1>"); 
} 
else 
{ 
    echo("<h1>Name NOT set.</h1>"); 
} 
?> 
+0

Можете ли вы показать нам базовый код, который вы используете? –

+0

Работает ли работа сессии? Можем ли мы видеть заголовки? –

+0

Причина, по которой вы видите 'GET /page1.php?PHPSESSID=v08 ...' из-за 'session_start', который запускается, когда форма сначала отображается. Каков заголовок со второго запроса? –

ответ

1

я решил проблему. Похоже, что php не будет передавать идентификатор сеанса во время перенаправлений как часть URL-адреса переадресации, даже если перенаправление находится на странице на том же веб-сайте. Вот почему переменная сеанса не была доступна в файле page2.php выше, и выход всегда был «Name NOT set». Поэтому я изменил URL-адрес перенаправления на page1.php, чтобы иметь идентификатор сеанса как часть его &, который сделал трюк.

$sid = session_name() . "=" . session_id(); 
header("Location: http://$host$path/page2.php?$sid"); 
+0

В режиме trans_sid PHP только вставляет идентификатор сеанса в HTML ('a' ссылки и формы). Он не будет изменять какие-либо javascript, onclick blocks, header() output или внешние файлы, такие как CSS через заголовки 'link'. –