PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP会话再生安全性大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我在使用PHP做一些非常基本的会话安全类型的事情时遇到了困难:

>从未经身份验证的上下文切换到经过身份验证的上下文时,应生成一个新的会话ID
>从经过身份验证的上下文切换到未经身份验证的上下文时,应生成一个新的会话ID

我想做的不仅是在切换上下文时重新生成会话ID,而且还要在切换上下文时立即在会话中放入一些内容(例如FLASH).这三页有望阐明我的期望:

<?PHP
/* page1.PHP */
session_start();
# Just putting something in the session which I expect to
# not show up later
$_SESSION['INFO1'] = 'INFO1';
?>
<html>
<a href="page2.PHP">Page 2</a>
<?PHP print_r($_SESSION) ?>
</html>

因此,当显示页面时,我希望看到INFO1出现.我也希望当我回到这里时不会看到INFO2出现.如果我还没有会话ID,我希望得到一个(我有).

<?PHP
# page2.PHP
session_destroy();
session_regenerate_id(TRUE);
$_SESSION['INFO2'] = 'From page 2';
session_write_close();
header('Location: page3.PHP');
exit;
?>

这最类似于注销功能-我们通过将TRUE传递给session_regenerate_id来使现有会话无效.另外,我在(可能是)新会话中添加了一些内容-可能类似于FLASH-说“您已成功注销.

#page3.PHP
<html>
<body>
<?PHP session_start(); ?>
<?PHP print_r($_SESSION); ?>
</body>
</html>

我希望在此页面上发生两件事:

>从page2.PHP重定向应该给我发送了一个新的会话ID cookie(它没有)
>我希望print_r从INFO2打印信息,而不是从INFO1打印信息.它没有来自INFO1的信息,但不包含来自INFO2的信息.

我对session_regenerate_id和重定向有非常非常不一致的结果.手动发送该Set-Cookie标头似乎很麻烦-但即使我没有发送,session_regenerate_id(TRUE)仍应使旧的会话ID无效-因此,即使浏览器由于某种原因没有获得新的会话ID,它不会在会话中看到任何信息,因为旧会话已失效.

其他人是否有处理此类问题的经验?有解决这些问题的好方法吗?

解决方法:

基于session_regenerate_id的documentation,听起来会话的内容总是被保留.您为其传递了TRUE参数,但这只会删除磁盘上的实际会话文件.存储在其中的值保存在$_SESSION中,然后写入新会话.

因此,也许可以手动清除它:

$_SESSION = array();

不过,不知道为什么看不到新的Cookie.您在哪里检查,看到了什么?

编辑:问题是由OP在下面的注释中揭示的,似乎是page2从未调用session_start来加载第一个会话.产生以下内容

<?PHP
    session_start();    # Load the old session
    session_destroy();  # Nuke it
    session_unset();    # Delete its contents
    session_start();    # Create a new session
    session_regenerate_id(TRUE);  # Ensure it has a new id
    $_SESSION['FLASH'] = "You've been logged out";
    session_write_close();  # Convince it to write
    header('Location: index.PHP');
?>

我不知道这是否很小.读者可以自己弄清楚其中有多少可以删除.

大佬总结

以上是大佬教程为你收集整理的PHP会话再生安全性全部内容,希望文章能够帮你解决PHP会话再生安全性所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: