PHP сессия не работает - PullRequest
4 голосов
/ 18 января 2012

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

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

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

<?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 сеанса отправляется следующим образом:

 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

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

Ответы [ 3 ]

2 голосов
/ 18 января 2012

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

Заголовки ответа не имеют COOKIE.

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

1 голос
/ 18 января 2012

Проверьте, изменяется ли идентификатор сеанса (с помощью session_id ()). Далее вы можете сократить строку:

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

С

$_SESSION['views'] += 1;
0 голосов
/ 04 февраля 2014

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

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...