根据我最近的问题(PHP - Session lost/emptied on form post),会话ID几乎随机在发布的表单上重新生成(登录 - >将项目添加到购物篮或将商品添加到购物篮 - > gt;登录),导致会话数据丢失。解决了一个问题,我可以将会话ID作为隐藏输入传递,以强制会话ID维持自身。这是一个实际修复?这会让我对任何漏洞开放吗?
请注意,我的网站是在共享服务器上运行的。
答案 0 :(得分:1)
我会在黑暗中捅一下并猜测当你将表单提交到不同的子域名时,即你在http://www.example.com,并且你正在提交https://secure.example.com或者之类的。
如果是这样,您需要确保会话cookie域设置为使用您网站的所有子域,而不仅仅是您当前的子域。您可以通过以下方式检查:
ini_get('session.cookie_domain');
// if this outputs something like "www.example.com" and you're submitting to
// "somethingelse.example.com", here's your problem.
如果设置不正确,您可以在php.ini或脚本中设置它:
ini_set('session.cookie_domain', '.example.com'); // or...
session_set_cookie_params(ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), '.example.com');
session_start();
...或者,您可以确保在提交表单时使用相同的子域,因为在此上下文中很少有充分的理由使用不同的子域。
或者您的问题可能完全不相关。无论如何都值得一试。
但是,正如@Kaustubh Karkare所说,通过表单传递会话变量的安全性与通过cookie传递相同。至于实用性,它是一种非常合理的(如果不经常使用的话)传递会话ID的方式。
答案 1 :(得分:0)
它不会影响您的安全级别。会话ID存储为用户浏览器上的cookie,您建议将其保存在HTML源代码中。无论哪种方式,最终用户或使用网络嗅探器的恶意实体都能够访问此数据。因此,如果能让您的工作更轻松,您就可以使用它。
答案 2 :(得分:-1)
解决了这个问题,以为我会更新你。
不要发布它,而是从表单转到您的操作页面并使用此
<?php
//let's start the session
session_start();
$_SESSION['whateveryouwanttocallit'] = session_id()
?>
所以基本上根本不发布....
您可以通过以下方式进行检查:
<?php print_r($_SESSION)?>
可以确认:<?php echo session_id()?>
然而,在回答你的问题时,这不是一个好的工作。
通过向会话发布会话ID,您只需创建信息的副本并根据需要命名,会话ID已经在您的会话中。
此外,如果您打算在隐藏输入中使用会话ID作为cookie的形式,以确保他们的信息不会丢失,问题将是:
如果这有帮助,请提前投票!