PHP сессия не работает - PullRequest
       17

PHP сессия не работает

6 голосов
/ 06 января 2011

Я работаю с wamp2.0 - PHP 5.3, apache 2.2.11, но мои сеансы не хранят данные.

У меня есть страница, которая принимает параметр, который (упрощенная версия) я хочу сохранить всеанс, поэтому, когда я прихожу к

http://www.example.com/home.php?sessid=db_session_id

Сценарий выглядит так:

session_start();

$sessid = @$_GET['sessid'];
if ($sessid) {
  $_SESSION['sessid'] = $sessid;
}
var_dump($_SESSION);

и выводит:

array(1) { [0]=> string(13) "db_session_id" } 

, что хорошо, но тогда,когда я перехожу на ссылку (без параметра sessid), массив $_SESSION становится пустым.Я пытался прокомментировать строку $_SESSION['sessid'] = $sessid;, прежде чем перейти на страницу без параметра, но все равно он не сработал.

Я проверил вывод session_id(), а идентификатор сеанса остаетсято же самое.

Настройки сеанса из phpinfo ()

Session Support enabled
Registered save handlers    files user
Registered serializer handlers  php php_binary wddx

Directive   Local Value Master Value
session.auto_start  Off Off
session.bug_compat_42   On  On
session.bug_compat_warn On  On
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly Off Off
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    no value    no value
session.entropy_length  0   0
session.gc_divisor  1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 5   5
session.hash_function   0   0
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   c:/wamp/tmp c:/wamp/tmp
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    On  On
session.use_trans_sid   0   0

РЕДАКТИРОВАТЬ:

Сеансы удаляются с помощью iframe.Я не знаю почему, но когда прокомментировано, сессии работают нормально.Дело в том, что iframe должен оставаться там (что, конечно, плохо, но я ничего не могу с этим поделать).Ну ... знаете ли вы какие-нибудь обходные пути для работы сессий с iframe?

Ответы [ 9 ]

2 голосов
/ 07 июля 2012

Это старый вопрос, но я пришел сюда с той же проблемой.Поскольку на вопрос не ответили, вот оно, что я нашел.

У меня была похожая проблема, и в моем случае проблема заключалась в том, что я не звонил session_start() на всех страницах, где использовался сеанс.,Я подумал, что должен вызывать его только на странице входа в систему, но это не так.

Кроме того, помните, что session_start() должен вызываться перед тегом <html>.

2 голосов
/ 03 августа 2012

Вы должны вызывать команду session_start(); на каждой странице. Это сработало для меня. Вы также должны вызывать это перед отправкой пользователю любого вывода (html, output, даже whitespace).

1 голос
/ 01 сентября 2015

Сегодня я провел около четырех часов, пока $ _SESSION не был сохранен на сервере. Оказалось, проблема с сервером. Система (Windows 2003, IIS 6) использовала временную папку Windows по умолчанию C: \ Windows \ Temp \ для хранения сеанса. Он создал его, но он был пустым.

По какой-то причине он просто перестал работать (раньше проблем не было). Мое лучшее предположение, что это достигло некоторого предела, или папка просто содержала слишком много файлов. Я разобрался, установив session.save_path в другую папку.

1 голос
/ 11 января 2013

Кадр может получить доступ к сеансу, только если он относится к тому же домену. Например:

<? 
$_SESSION["foo"]="foo"; 
?><html> 
 <body> 
  <iframe src ="test.php" width="200" height="200"></iframe> 
 </body> 
</html> 
<? 
print_r($_SESSION); 
?>

Должен работать снаружи и внутри iframe. Если у вас все еще есть проблемы, попробуйте:

 <?php  session_start();

    $sessid = $_GET['sessid'];
    if (isset($sessid) && $sessid != "" && $sessid != NULL) {
      $_SESSION['sessid'] = $sessid;
    }
    print_r($_SESSION);?>
1 голос
/ 12 октября 2011

Если вы столкнулись с подобной проблемой, я считаю, что это довольно стоящий тест.Выполните несколько запросов в браузере и посмотрите, что вы получите.

<?php

session_start();

$_SESSION['test'][] = time();

header('Content-type: text/plain');
print_r($_SESSION);

Автору: Ваш последний комментарий упоминает, что ваш скрипт работает - хорошо для вас.Если он сломается, попробуйте фрагмент кода выше и дайте мне знать, что вы получите.

0 голосов
/ 06 января 2011

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

Таким образом, вместо:

$sessid = @$_GET['sessid'];
if ($sessid) {
  $_SESSION['sessid'] = $sessid;
}

я бы использовал:

if (isset($_GET['sessid']))
{
  $_SESSION['sessid'] = $_GET['sessid'];
}

Кстати, я бы также сделал некоторую проверку ввода для $_GET['sessid'], чтобы убедиться, что он содержит толькодопустимые символы.

0 голосов
/ 06 января 2011

...

Это может быть потому, что вы не используете домен как таковой?В своем вопросе вы используете example.com, однако вы разрабатываете на своем локальном компьютере.Я предполагаю, что вы используете localhost.

Вы должны знать, что нельзя установить куки на localhost, см., Например: Cookies на localhost с явным доменом

Вы пробоваликод на другом хосте?

http://blog.perplexedlabs.com/2008/12/21/php-sessions-on-localhost/

0 голосов
/ 06 января 2011

http://php.net/manual/en/function.session-start.php

Вы должны поместить что-то в глобальный массив $ _SESSION, чтобы оно могло что-либо зарегистрировать, иначе оно пустое ...

Поскольку вы тестируете существование sessid для добавления его в $ _SESSION, $ _SESSION остается пустым.

Попробуйте что-то вроде:

session_start();
$_SESSION['sessid'] = 123456789;
var_dump($_SESSION);
0 голосов
/ 06 января 2011

Из всего происходящего я могу только догадываться, что ваша сессия не была сохранена.Является ли ваша session.save_path -> c: / wamp / tmp доступной для записи (снимите флажок только для чтения в свойствах) папку?Apache запускается как администратор или какой-то уровень с достаточными правами для записи в эту папку в службах в инструментах администратора на панели управления?

На самом деле, проверьте это: Не поддерживаются переменные сессии PHP .По сути, дважды запустите session_id () на этой странице и сравните идентификаторы сеанса.Если они отличаются, значит, ваш браузер не принимает сессионные куки.

РЕДАКТИРОВАТЬ: не понял, что вы уже сделали это^

Это может помочь. Ссылка <--- Посмотрите на второе предложение / ответ с кодом отладки для сеанса. </p>

...