我已经到处找在网络上不工作时,和会话变量的细微之处需要澄清一些对我来说。PHP会话(使用myPajamas登录脚本)改变网络
我有一个网站,设置会话变量(我认为这也将定义会话ID是什么?不知道如何工作的一个cookie),和所有完美的作品。我在使用手机漫游(使用wifi)时发现的情况是,只要手机切换wifi网络,浏览器似乎无法再访问该会话,直到该窗口/标签关闭并重新打开。
从我读过以下申请什么,请说明对我来说:
当浏览器窗口关闭时,会话cookie被破坏,因此当我重新打开它,创建一个新的Cookie附到新的会话ID。从而允许会话再次正常工作?
如果网络切换,服务器将创建一个新的会话ID,但由于浏览器窗口未关闭,旧的会话cookie未被销毁,浏览器尝试操作过期的会话ID(旧的会话cookie包含)?不知道如果这是真的,我已阅读了这个荒谬的页数,我找不到任何具体的。但这是我得到的印象。我见过这么多的警告有关
session_regenerate_id()
,我对其非常紧张......
任何帮助,关于这个细节,或方法来解决这将是非常有益的。我在我束手无策......
UPDATE
我使用的是mypajamas脚本,以方便登录。会话正常创建。但是,在查看代码后,我找到了一个为$_SERVER['REMOTE_ADDR']
和$_SERVER['HTTP_USER_AGENT']
值设置会话变量的位置。然后交叉引用它们以确保它在同一IP上的相同浏览器上是同一用户。这是为了防止多源攻击(不可能发生劫持)。问题是使用移动浏览器时,或动态IP的IP可以肯定会改变,认证失败。
我无法相信我能不知道这一点,我花了几个小时寻找关于会话ID的变化问题。
希望这可以帮助别人,在今后类似的问题。并且对所有阅读这篇文章的人表示衷心的感谢,您在评论中的指导无疑帮助我解决了这个问题。
编辑的代码
class.mypajamas.php
来源:
function check_ipau() { // user visits again... but is it really him? check values set above (by get_session())
if($_SESSION['auth'.$this->_unique_id]['ip'] == $_SERVER['REMOTE_ADDR']
&& $_SESSION['auth'.$this->_unique_id]['ua'] == $_SERVER['HTTP_USER_AGENT']) {
// session data is correct -> user did not "change" ip-address or user agent (aka; hijack is unlikely)
return true;
}
else {
return false;
}
}
要:
个function check_ipau() { // user visits again... but is it really him? check values set above (by get_session())
/*if( $_SESSION['auth'.$this->_unique_id]['ip'] == $_SERVER['REMOTE_ADDR']
&& $_SESSION['auth'.$this->_unique_id]['ua'] == $_SERVER['HTTP_USER_AGENT']) {
// session data is correct -> user did not "change" ip-address or user agent (aka; hijack is unlikely)
*/
return true;
/*
}
else {
return false;
}*/
}
你使用直接PHP还是你使用框架?你当前的会话处理代码是什么样的? (或者这不是你的代码?) – Doon
1.不一定。 Cookie可以设置为生存任意时间。如果cookie被删除,那么会话不见了。 2.我不知道你的意思是“网络交换”。默认情况下,PHP中的会话数据是服务器上由cookie中的id附加的小文件。物理网络与它无关。 – Cfreak
它是直接的PHP,没有框架。我将在此处将会话创建显示为更新...首先让它可读,然后给我一两分钟:) – MaurerPower