【问题标题】:PHP Session not working in PHP5PHP 会话在 PHP5 中不起作用
【发布时间】:2009-05-18 17:07:27
【问题描述】:

我有 2 个页面:login.php 和 index.php。两个页面都以

开头
session_start();

当我设置时

$_SESSION['user'] = "name"; 

在 login.php 中,而不是打开 index.php,我的会话对象是空的。怎么会?

编辑:

我发现了问题:IE 7。我必须访问我的域。但是,我认为会话存储在服务器上,而不是客户端?比为什么我拥有对我的域的 IE 盛大访问权限? (http://www.pcwindowstips.com/2007/09/04/how-to-enable-cookies-in-internet-explorer-7/)

【问题讨论】:

  • 信息太少了。您启用了 cookie 吗?
  • 您是否激活了错误报告?是否显示任何错误/警告?
  • 好点。我检查了 FireFox,它确实可以工作。但是在 IE 7 中它不起作用。也许与 cookie 有关?

标签: php session


【解决方案1】:

我认为会话存储在服务器上,而不是客户端上?比为什么我有 IE 授予访问我的域的权限? (http://www.pcwindowstips.com/2007/09/04/how-to-enable-cookies-in-internet-explorer-7/)

会话的工作方式是为站点存储一个会话 cookie,其中包含您的会话 ID。服务器知道你是谁的唯一方法是在每次页面加载时读取会话 ID cookie。每个用户的所有 $_SESSION 数据都存储在服务器上,但必须设置 cookie 以便服务器知道要检索哪些 $_SESSION 数据。

这也是为什么如果您获得他们的会话 id cookie,您基本上可以“成为”另一个用户。

【讨论】:

  • aah thnx,这让事情变得清晰!但是IE7有解决这个问题的方法吗?
  • 只启用cookies。无论如何,当今网络上的大多数网站都会被禁用 cookie 所破坏,我认为您不必担心这种情况。
【解决方案2】:

Internet Explorer 的 cookie 政策比大多数其他浏览器更严格。检查您的session cookie parameters(另请参阅session_get_cookie_params())并尽可能用显式值替换默认值。此外,您可能会发送 [假 P3P 策略](http://msdn.microsoft.com/en-us/library/ms537343(VS.85).aspx) 以满足 Internet Explorer 的要求。

【讨论】:

  • Thnx,当我执行 print_r(session_get_cookie_params) 我看到这个: Array ( [lifetime] => 0 [path] => / [domain] => [secure] => [httponly] => ) 我怎样才能做到这一点?
  • 我如何发送虚假的 p3p 策略?我在 Google 上找不到它
  • session.cookie_domain设置为您要在其中使用cookie的域。可以使用header函数发送紧凑的P3P策略。
  • session.cookie_domain 必须在 php.ini 中设置?如果是这样,我无权访问..
  • 不,您可以使用ini_setsession_set_cookie_params 函数进行设置。请参阅docs.php.net/manual/en/session.configuration.php中的“可更改”列
【解决方案3】:

也许 php.ini 中的这个变量正在映射到现有路径

session.save_path = "c:/wrong/path"

【讨论】:

    【解决方案4】:

    这是发生在我身上的事情,可能会为某人带来启示。我的会话工作不正常。 IE 8 和 Firefox 正在丢失会话信息。

    我包含了一个文件。包含的文件在尾随的 &ques 之后有一个额外的回车符?>

    回车开始了会话。我把 session_start 放在包含之后。繁荣。

    【讨论】:

      【解决方案5】:

      这里没有太多信息,我会尝试使用我的精神力量。

      用户登录后,你是否设置了会话变量,然后使用 http 标头将用户重定向到 index.php?如果是这样,我认为会话 cookie 不会发送给用户。如果是这种情况,解决方案是:

      1. 在最初显示登录表单时调用 session_start()(不仅仅是在用户回帖之后);或:
      2. 显示“登录成功!”消息,然后使用元刷新重定向,或者只提供指向 index.php 的链接。

      您还可以尝试在两个页面上转储会话 ID,以查看您是否正在以某种方式开始新会话:

      echo 'Session ID is: ' . SID . "<br/>\n"
      

      【讨论】:

        【解决方案6】:

        在调用 session_start() 之前,您需要验证是否启用了 cookie,并且没有任何内容(包括存档开头或结尾的空白行)发送到浏览器。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-06-28
          • 2017-02-01
          • 2012-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-09
          相关资源
          最近更新 更多