PHPSESSID会随机出现在表单中。

4
我有一个用PHP编写的登录表单,每次打开浏览器并进入相应的页面时,表单的第一个字段是这样的:
<input type="hidden" name="PHPSESSID" value="session_id_code" />
如果我关闭窗口,但不重新启动浏览器,这种情况就不会发生。你知道发生了什么以及为什么吗?

谢谢!


表单代码:

<?php
if (condition) {
?>
<form method="post" action="">
<dl>
<dt>Email:</dt>
<dd><input type="text" name="useremail" /></dd>
<dt>Password:</dt>
<dd>
<input type="password" name="userpass" /></dd>
<dt class="dt-buttons"><input type="submit" name="button_login" value="Login" class="button" /></dt>
</dl>
<input type="hidden" name="formkey" id="formkey" value="224ca00155w2fcda8906e1e40af03a71" />
</form>
<?php
}
?>
表单是简单的HTML,而不是动态生成的。
EDIT2:
正如我所说,当我在启动浏览器后第一次访问页面时,会出现这种情况。如果之后刷新页面,隐藏字段不会出现。
这可能与SSL证书有关吗?如果是,为什么有些页面/表单会表现出这样的情况,而有些则不会?

2
我们需要生成表单的代码。 - MitMaro
表单没有什么花哨的地方。请参见我上面的编辑。 - Alex
1个回答

7

看起来你启用了透明会话ID(transparent session id)。使用透明会话ID可能存在安全问题,特别是如果你的网站链接到外部内容,或者允许链接共享 - 它会将用户的会话ID泄露为URL的一部分,这意味着会话极易被劫持。


确实,PHP是使用--enable-trans-sid编译的,但问题在于我有几个类似的表单,有些表现出这种情况,而其他表单则没有。你有什么想法为什么会这样? - Alex
取决于哪些正在执行session_start(),最有可能的情况是如果没有活动会话,则没有理由嵌入会话ID。 - Marc B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接