当前位置: 首页 > 面试题库 >

真正破坏PHP会话?

燕光熙
2023-03-14
问题内容

我听过关于此主题的不同回答,那么销毁PHP会话的肯定方法是什么?

session_start();
if(isset($_SESSION['foo'])) {
   unset($_SESSION['foo'];
   ...
}
session_destroy();

在最简单的情况下,这是否足以真正终止用户与服务器之间的会话?


问题答案:

要销毁会话,您应该采取以下步骤:

  • 删除会话数据
  • 使会话ID无效

为此,我将使用以下代码:

session_start();
// resets the session data for the rest of the runtime
$_SESSION = array();
// sends as Set-Cookie to invalidate the session cookie
if (isset($_COOKIE[session_name()])) { 
    $params = session_get_cookie_params();
    setcookie(session_name(), '', 1, $params['path'], $params['domain'], $params['secure'], isset($params['httponly']));
}
session_destroy();

为了确保会话ID无效,您应该只允许脚本启动的会话ID。因此,设置一个标志并检查它是否被设置:

session_start();
if (!isset($_SESSION['CREATED'])) {
    // invalidate old session data and ID
    session_regenerate_id(true);
    $_SESSION['CREATED'] = time();
}

此外,您可以使用此时间戳定期交换会话ID,以缩短其寿命:

if (time() - $_SESSION['CREATED'] > ini_get('session.gc_maxlifetime')) {
    session_regenerate_id(true);
    $_SESSION['CREATED'] = time();
}


 类似资料:
  • 我有一个非常奇怪的问题。 当我在浏览器中打开下面的脚本并执行它时,一切正常。即使我在命令行中调用脚本,也会得到预期的结果。 但是,如果在后台作业中运行脚本,脚本将在“preg_match”函数中中止,而不会出现任何错误。我在任何地方都没有关于此的错误消息,无论是在日志中还是其他任何地方。我还检查了函数是否存在,它是否存在。 脚本似乎只是在preg_匹配时中止,并且没有显示任何关于可能错误的消息。所

  • 我ogin.php 指数php 我做了一个登录脚本,打开,如果密码是正确的,我ndex.php网站。当第一次通过登录脚本打开ndex.php网站时,一切正常,会话设置完毕。但是在我刷新页面后,会话会被破坏,并且没有设置。那么我如何保存会话,这样它就不会因为刷新浏览器而被破坏呢?

  • 编辑1: 我目前从一个Main类调用它,如下所示: } 原文: 解释后代码如下: 我有一个带有JavaConfig的Spring应用程序,称之为主应用程序,它从库中导入另一个Spring JavaConfig类。这个导入的JavaConfig应该用一个方面包装在主应用程序中创建的任何数据源,这个方面有一个自动连接的LogDelegator。 只要主应用程序只包含一个数据源,一切都正常。但是,当我向

  • 使用这个延迟加载代码,我的lightbox中断:单击一个图像显示lightbox,但没有图像。 通过检查inspector,我可以看到lightbox img标签没有值。我猜在延迟加载将属性和值分配给图像之前,lightbox会检查src。 如何解决此问题?

  • 对于Oracle池连接,我使用,但这些连接似乎在数据库中保持活动状态。今天我在连接到Oracle数据库时遇到了一个错误: ORA-12516:TNS:侦听器找不到具有匹配协议栈的可用处理程序 另外,我在dao级别使用jdk7 try-with-resources语法进行连接: 弄不清真正的问题在哪里。我应该使用c3p0而不是OracleDataSource吗?ojdbc7中是否有bug或我的代码中

  • 我正在使用spring boot开发一个小应用程序。我的问题是,我需要显示用户的名字时,一个用户的身份验证正确。每次身份验证(每次登录输入用户名和密码)都会正确显示名字。但是如果我们关闭浏览器并在会话超时之前重新打开它,而没有输入用户名和密码,则不会显示First name。 身份验证时我的口供 安全配置 会话列表 我参考了Java:为什么当tab或浏览器关闭时http会话不被破坏?,正如他们所说