Php 头重定向和维护会话以及安全性

Php 头重定向和维护会话以及安全性,php,security,session-variables,Php,Security,Session Variables,我正在开发一个购物车,它使用例如Captcha来验证用户是否是人类。当收到不正确的提交时,用户将被重定向到原始验证页面 <?php header('Location:https://mysite.com/cart.php?PHPSESSID=mysessionid'); ?> 不幸的是,如果我没有在URL中发送会话id,我将丢失页面中的所有会话数据,并调用session_start()启动新会话。在PHP中,这似乎是实现这一点的唯一方法。我觉得这种方法有点不安全,因为任何用户都

我正在开发一个购物车,它使用例如Captcha来验证用户是否是人类。当收到不正确的提交时,用户将被重定向到原始验证页面

<?php header('Location:https://mysite.com/cart.php?PHPSESSID=mysessionid'); ?>


不幸的是,如果我没有在URL中发送会话id,我将丢失页面中的所有会话数据,并调用session_start()启动新会话。在PHP中,这似乎是实现这一点的唯一方法。我觉得这种方法有点不安全,因为任何用户都可以通过使用URL和他们获得的会话id劫持会话。这可以通过用户离开我的网站并将上面的URL作为他们下一步浏览的任何网站的参考页面来完成。是否有更好的方法隐藏此变量?这似乎是一个可怕的大风险,让这些信息在公开和媒体劫持会话所有相同的空间。谢谢你的阅读

通常PHP会话是从浏览器随初始请求一起发送的HTTP cookie重新初始化的

在essense中,只要会话cookie保持有效并被发送,用户就可以在任意随机页面上自由引导浏览器,并在返回时重新初始化会话


如果会话没有被重新初始化,那么一个好的开始就是找出“为什么?”。

因此您不使用Cookie作为会话ID?如果您的浏览器不接受Cookie(可能用于此特定站点),或者您禁用了会话Cookie,则通常会发生这种情况。无论如何:每个标题的正确符号是
Name=Value
,而不是
Name:Value
@KingCrunch:No,实际上是
字段名“:”[field Value]
,而字段值前面可能有空格。哇,需要咖啡。我可以用cookies,KingCrunch,你用Name=Value而不是Name:Value指的是什么?@Gumbo:你说得对。不知道,我把它和我搞混了-对我来说是1:X