为了账号安全,请及时绑定邮箱和手机立即绑定

PHP $_SESSION 和 $_COOKIE 奇怪的行为

PHP $_SESSION 和 $_COOKIE 奇怪的行为

PHP
ITMISS 2022-11-04 16:36:39
我正在尝试将 COOKIES 安装到我的网站中。我在 GitHub 上找到了一个脚本:https ://github.com/jotaroita/secure-login-php7-remember-register-resetpw我已经实现了脚本,并且能够登录。我可以只使用 SESSION 登录,或者我可以同时使用 SESSION 登录并设置“记住我 -COOKIE”。为了测试 COOKIE,我将 SESSION 设置为 1 分钟后过期。$expireAfter = 1;Senario:我登录网站并勾选“记住我”。会话开始并设置了 cookie。一切都很好!## last action: 1 seconds agoskip the cookie check: session already set我等待 60 秒并重新加载页面。会话销毁并且 Cookie 读取:## last action: 108 seconds agosession destroy for inactivitycookie readcookie valid formatcookie right selectorcookie right tokenset a new token in DB and in cookiesession set<-在此消息中我可以输出会话数据:$_SESSION['user']始终但在我的其他页面(home.php)$_SESSION['user']中是空的?!(我包括来自:check.php 的 SESSION 和 COOKIE 检查)if(isset($_SESSION['last_action'])){返回 true如果我再等 60 秒并重新加载页面,则if(isset($_SESSION['last_action'])){返回 false。但是现在$_SESSION['user']设置好了。如果我再等 60 秒并重新加载页面。if(isset($_SESSION['last_action'])){返回真。但现在$_SESSION['user']是空的。主页.php<?php//START SESSIONsession_start();//CONNECT TO DB, SET HEADER, SET TIMEZONE, CHECK FOR LOGIN-COOKIESinclude("check.php");//CHECK IF SESSION EXISTif(!isset($_SESSION['user'])) {    $isSesstion = false;    header("Location: /index.php");}else{    $isSesstion = true;}.....那么,代码有什么问题?为什么每次刷新网页时 $_SESSION 都会充满数据?为什么每次刷新页面都不返回true?以及为什么 $_SESSION 一直在调试消息中携带数据......但它没有被携带到 home.php 中?if(isset($_SESSION['last_action'])){session set ".$_SESSION['user']['usr_fname']."include(check.php");你需要更多的代码吗?只是要求它!
查看完整描述

1 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

我想我发现了问题。


取消设置并销毁会话后。我不得不开始一个新的会话。

奇怪的是,这种情况每秒钟才发生一次。但是添加session_start();解决了问题!


if(isset($_SESSION['last_action'])){

  $secondsInactive = time() - $_SESSION['last_action'];


  $expireAfterSeconds = $expireAfter * 60;


  $debug.="last action: $secondsInactive seconds ago<br>";

  if($secondsInactive >= $expireAfterSeconds){

    //User has been inactive for too long.

    //Kill their session.

    session_unset();

    session_destroy();

    $debug.="session destroy for inactivity<br>";

  }  

}


...

session_start();

$_SESSION['user'] = $session_data;

...


查看完整回答
反对 回复 2022-11-04
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信