2012-01-18 2 views
4

Я отказался от этого вопроса, так как подозреваю, что что-то испортило мои настройки, вызвавшие проблемы, и с тех пор создал новый сервер. Я решил, что найти проблему потребует больше времени, чем запуск нового сервера и настройка его. Тем не менее, мне все еще интересно узнать, что вызвало это, поскольку он отлично работал в течение 3 месяцев и только начал показывать эти симптомы в течение выходных. **PHP сессия не работает

=========================================================================================================================================================== ====================================

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

<?php session_start(); 
    print_r($_SESSION); 
    if(isset($_SESSION['views'])){ 
     $_SESSION['views'] = $_SESSION['views']+ 1; 
    } 
    else{ 
     $_SESSION['views'] = 1; 
    } 
    echo "views = ". $_SESSION['views']; 
    echo '<p><a href="">Refresh</a></p>'; 

    # for testing 
    var_dump($_SESSION); 

?> 

Что происходит, что var_dump показывает, что сеанс создается с помощью ключа взглядов и значение 1. Однако при обновлении страницы не обнаружен активный сеанс, а ключ вида снова установлен на 1.

Теперь странная вещь для меня в том, что есть идентификатор сеанса, созданный под PHPSESSID. Я попытался проверить, доступен ли путь для хранения сессий, и он есть. Заголовки, возвращаемые страницы следующим образом:

Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public 
Connection close 
Content-Encoding gzip 
Content-Length 68 
Content-Type text/html; charset=utf-8 
Date Wed, 18 Jan 2012 13:03:34 GMT 
Expires Thu, 19 Nov 1981 08:52:00 GMT 
Pragma no-cache 
Server Apache 
Vary Accept-Encoding 
X-UA-Compatible IE=Edge,chrome=1 

И в заголовке запроса сеанса куки отправить следующим образом:

Cookie PHPSESSID=0e1416r7pun3pamvc7cp8mjat3 

Я не уверен, если есть что-нибудь там. Я запускаю это на Amazon EC2 linux AMI.

Я также включают в phpinfo():

PHP Version 5.3.6 
System Linux ip-**-**-**-** *.*.**.**-**.**.amzn1.x86_64 #1 SMP Sat Feb 19 23:42:04 UTC 2011 x86_64 
session 
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 Off Off 
session.bug_compat_warn Off Off 
session.cache_expire 180 180 
session.cache_limiter nocache nocache 
session.cookie_domain no value no value 
session.cookie_httponly On 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 /var/lib/php/session /var/lib/php/session 
session.serialize_handler php php 
session.use_cookies On On 
session.use_only_cookies On On 
session.use_trans_sid 0 0 

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

+1

Подтвердите, что ваш каталог сеансов должен быть доступен для записи .. – Rikesh

+0

1. Вы можете увидеть файл сеанса в/tmp? 2. Каков ваш клиент/браузер? – Teson

+0

Я вижу файл сеанса в каталоге «/ var/lib/php/session» в виде «sess _» + id. Я тестировал это во всех браузерах, кроме IE и Opera, а также на моем iphone, как через Wi-Fi, так и через мобильную связь. Все с тем же результатом PS. Я просто попытался открыть файл сеанса с помощью vim (не знаю, должно ли это быть возможно), но это пустой файл. –

ответ

1

Проверьте, не меняется ли идентификатор сеанса (с session_id()). Кроме того, вы можете сократить линию:

$_SESSION['views'] = $_SESSION['views']+ 1; 

С

$_SESSION['views'] += 1; 
+0

Идентификатор сеанса остается прежним. –

+0

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

+0

их содержимое является emtpy при открытии с помощью vim через терминал. –

2

Вы должны проверить session.use_cookies в файле php.ini.

В заголовках ответа нет COOKIE.

session.use_cookies должен быть равен 1.

+0

Как я вижу из ваших прав, у вас уже есть session.use_cookies = 1. Как сказал Michiel Thalen «Проверьте, изменился ли идентификатор сеанса». –

+0

Кажется, phpinfo() показывает «Вкл.» Для session.use_cookies –

+0

Да, я видел. :-) –

0

При создании ссылки на ту же страницу, на которой вы находитесь, вся страница не будет обновляться. Вам нужно будет сделать это через JavaScript.

В HTML (или PHP эхо):

<button type='button' onclick='refreshPage()'>Refresh</button> 

Теперь установите функцию в JavaScript:

function refreshPage(){ 
document.location.reload(true); 
} 

Когда JavaScript выполняет это, вся страница будет обновляться и все PHP линии будут работать еще раз.

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

Смежные вопросы