【问题标题】:php session pass with setcookie and unset使用 setcookie 和未设置的 php 会话传递
【发布时间】:2012-08-01 16:13:19
【问题描述】:

我有一个奇怪的问题,当我在 PHP 中使用 setcookie 和会话时,当我的浏览器打开时,一切正常,但是当我关闭它时,我无法将 $_SESSION 从页面传递到另一个页面! 在登录页面我有:

$_SESSION['name'] = $_POST['name'];
$_SESSION['pass'] = $_POST['pass'];
$life=2592000;//1 month
setcookie(session_name(),session_id(),time()+$life);
header("location:administrator/");
die();

我在它们顶部的每个页面中都使用了session_start();,我也使用此代码进行了注销:

session_start();
unset($_SESSION['name']);
unset($_SESSION['pass']);
session_destroy();
header("location:../");

重要的一点是,当我检查浏览器 cookie 时,在关闭浏览器之前有两个 cookie,它们的内容值完全相同,一个在会话结束时过期,另一个在一个月后过期,我喜欢这样,但随后我关闭浏览器并返回,有两个 cookie 但具有不同的值!我认为案例问题和会话变量不会在页面之间传递。

【问题讨论】:

  • 当您关闭浏览器时,您会发现$_SESSION 丢失了,对吧?
  • 当我关闭浏览器会话丢失并且 cookie 不起作用!但我无法再次登录,因为我无法将 $_SESSION 从检查页面传递给管理员。注意:当我删除cookie时,登录工作!
  • 这是我的登出页面!我必须销毁它然后重定向!

标签: php session session-cookies unset


【解决方案1】:

除了@Matt 提到的问题(您可能需要一些自定义机制来使用 cookie 恢复或重新启动会话),请记住使用 mod_rewrite 或实际目录会与 cookie 路径混淆!为确保 cookie 在您需要的时间和地点可用,请添加附加参数 /PHP setcookie(),$path 参数)

【讨论】:

  • 很高兴听到这个消息。但请注意,会话文件通常存储在临时目录中,并在几个小时后删除(取决于服务器配置)。因此,接受@Matt 建议并使用存储在 cookie 中的值(可能是一些指向 db 记录的指针)重新启动会话
猜你喜欢
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 2015-01-14
相关资源
最近更新 更多