【问题标题】:PHP session not workingPHP会话不工作
【发布时间】:2012-02-13 05:00:33
【问题描述】:

我已经放弃了这个问题,因为我怀疑我的设置损坏了导致问题,并从那时起创建了一个新服务器。我认为找到问题比启动新服务器并设置它需要更多时间。但是,我仍然有兴趣找出导致此问题的原因,因为它完美运行了 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 下创建了一个会话 ID。我试图检查存储会话的路径是否可写,并且是。页面返回的headers如下:

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

任何帮助将不胜感激,因为我整天都在解决这个问题,但似乎找不到解决方案。如果您需要更多信息,请告诉我。

【问题讨论】:

  • 确认你的会话目录必须是可写的..
  • 1.你能在 /tmp 下看到你的会话文件吗? 2. 你的客户端/浏览器是什么?
  • 可以看到“/var/lib/php/session”目录下的session文件,形式为“sess_”+id。我已经在除 IE 和 Opera 之外的所有浏览器以及我的 iphone 上通过 WiFi 和移动连接进行了测试。都具有相同的结果 PS。我刚刚尝试用vim打开会话文件(不知道这是否可能),但它是一个空文件。
  • 试试这个链接:stackoverflow.com/questions/155920/…>
  • 我检查了所有答案,但它们似乎对我不起作用,我也将该问题用于我的问题中显示的简单示例。

标签: php session amazon-ec2


【解决方案1】:

您应该检查 php.ini 文件中的 session.use_cookies。

响应的标头没有 COOKIE。

session.use_cookies 必须等于 1。

【讨论】:

  • 从您的编辑中可以看出,您已经拥有 session.use_cookies = 1 了。正如 Michiel Thalen 所说的“检查 Session id 是否发生变化”。
  • 似乎 phpinfo() 为 session.use_cookies 显示“开启”
  • 您的代码对我有用,每次刷新时始终显示 $views 变量 +1。您确定您的浏览器会将 COOKIE 发送回服务器吗?!
  • 我认为是这样,因为刷新页面时会话 ID 不会改变。
  • 这似乎是正确的,请确保您的 Apache 组是“apache”。在某些发行版(如 Ubuntu)中,该组是 www-data 或 httpd。
【解决方案2】:

检查 Session id 是否改变(使用 session_id() )。 此外,您可以缩写该行:

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

$_SESSION['views'] += 1;

【讨论】:

  • 会话ID保持不变。
  • 你能看到会话路径上创建的文件吗?他们的内容是什么?
  • 通过终端用vim打开它们的内容是空的。
【解决方案3】:

当您创建指向您所在页面的链接时,不会刷新整个页面。您必须通过 JavaScript 来执行此操作。

在 HTML(或 PHP 回显)中:

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

现在在 JavaScript 中设置函数:

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

当 JavaScript 执行此操作时,整个页面将刷新,所有 PHP 行将再次运行。

另一种尝试方法是链接到另一个页面,然后链接回第一页,然后整个页面也再次加载。

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 2014-04-10
    • 2017-09-20
    • 2012-06-27
    相关资源
    最近更新 更多