会话cookie在脚本结束时重置为默认值

时间:2015-08-09 17:49:10

标签: php session cookies

我做了一个简单的注册页面,在验证之后,会话会话ID添加一个唯一的标识符来识别用户,并设置会话变量' UID'自定义值。然后脚本重定向到新页面。

   $_SESSION['UID'] = $id;
   session_id($sessID);
   echo session_id();

   session_write_close();
   header("Location: https://localhost/AccountWebsite/landing.php");
   exit();
?>

着陆页应该只能由成员(即我的脚本设置了特殊唯一会话ID的成员)访问,并且该功能不起作用。因此,要检查为什么,目前我允许任何人访问该页面并且他们的会话ID被回应,那么' UID'会话变量。

<?php 
   session_start();
   echo session_id()."\n";
   echo $_SESSION['UID'];
?> 

现在,当我回复身份时,它不是我自己设定的那个。它是通用的PHP,并且变量不存在。在调试过程中,我在注册脚本中注释掉了重定向,而是让它回显它刚刚设置的会话ID。回显的id是正确的(很明显,因为它在它设置的脚本中回显),尽管当我在Firefox上输入cookie管理器时,它会将会话ID显示为通用的php,这意味着会话在第一个脚本结束时重置,不在会话之间。

  
      
  1. 确保session_start();在任何会话出现之前调用   调用。所以一个安全的赌注就是把它放在你的开头   页面,在打开php标签之后立即执行任何其他操作。   还要确保在打开php之前没有空格/制表符   标签
  2.   
  3. 在标题重定向之后,使用exit()结束当前脚本; (其他人也建议使用session_write_close();和   session_regenerate_id(true),您也可以尝试这些,但我会使用   出口();)
  4.   
  5. 确保在您用于测试的浏览器中启用了Cookie。
  6.   
  7. 确保register_globals已关闭,您可以在php.ini文件中查看,也可以使用phpinfo()。有关如何将其关闭的信息,请参阅此处。      
        
    1. 确保您没有删除或清空会话
    2.   
  8.   
  9. 确保$ _SESSION超全局数组中的键不会被覆盖
  10.   
  11. 确保您重定向到同一个域。因此,从www.yourdomain.com重定向到yourdomain.com并不会进行会话   前进。
  12.   
  13. 确保您的文件扩展名为.php(它会发生!)
  14.   

我从dayuloli's answer on this post完成了上述所有操作 并且整天都在调试。请帮忙,为什么会话没有保留我在脚本结束时设置的id和变量值并sccross整个服务器?

附加信息:我尝试了另一个示例文件夹(在htdocs上),其中一个页面设置一个变量而另一个页面回应它,并且它起作用。

1 个答案:

答案 0 :(得分:1)

除非您想要多个会话,否则您不需要设置session_id。如果您确实指定了session_id,则需要先调用session_start()以开始使用它并将cookie提交到客户端的浏览器中。

除了该解释之外,您还需要在需要会话的任何脚本的顶部使用session_start()。

来自http://php.net/manual/en/function.session-id.php

  需要在session_start()

之前调用

session_id()      当session_start()为时,

session_id()将始终发送新的cookie   称为