PHP用户会话获取'Muddled'

问题描述:

我遇到的应用程序是一个通用的Web应用程序...没有什么特别的关于它处理用户的方式。也就是说,我在会话变量中处理用户信息,并通过cookie管理会话。PHP用户会话获取'Muddled'

我的客户有一个问题,即用户登录后,他们每时每刻都会看到一个不同用户的页面(这很容易确定,因为用户的姓名位于每页的顶部)。如果他们点击“主页”链接,显然,一切都很好。

现在就我的PHP知识而言,将这种事情混合起来需要一些努力,对吧?我无法在我们的任何开发环境中复制这个问题,就我而言,就像我说的那样,实际上“共享”这种会话信息需要一些努力...

所以我的问题是这样的:可能的问题是什么?我之前每次遇到这种情况都是因为“错误行为”的代理服务器,尽管他们告诉我他们不代理这些请求。

还有什么我可能会失踪?任何其他可能的原因(自然这可能包括我的代码问题)?

谢谢...

所以事实证明,中最终结果这个情况来看,至少,是相当古怪。

事实证明,客户正在使用手提电脑访问应用程序,并让电池变平。这个特定的设备然后将其时钟重置为2005年,当电池最终被充电时,似乎这导致浏览器从其缓存中读取某些页面。

只要设备上的时钟设置正确,问题就消失了。

感谢所有的建议:我讨厌试图调试这些缓存类型问题。不过,我想我应该添加一些标题来尝试停止这些手持设备缓存数据。

你向用户呈现的是在他们(或取会话ID作为参数的其他请求)的会话ID链接?

+0

不是故意的,没有。我猜如果浏览器没有收到cookie,那么它会默认使用这个功能。在请求中使用会话标识会让事情变得更好还是更糟? – Narcissus 2009-06-15 15:24:55

+0

更糟糕的是,因为然后链接可以在用户与他们的session_id之间共享,然后他们登录到他们的帐户。这就是我正在想的事。它可能会在你不知道的情况下(或者用户的)某些Ajax查询请求一个会话ID或者另类的东西。 – 2009-06-15 16:18:30

通过它的声音,即使你的客户向你保证它不是,它仍然像我的代理或缓存问题。如果可能的话,您可以在用户字段附近生成页面时添加类似时间戳的内容,以确保请求是最新的。

这种方式,如果页面混乱,你有一些迹象表明,如果页面生成较早,并通过路上的东西存储。如果您的ajax结果被浏览器缓存,并且您的客户端在同一个浏览器上有多个人,则不需要代理来获取古怪的结果。

你可以解决这个问题的另一种方法是记录来自客户端的请求,并检查你是否错过了任何东西。如果你回放请求,你会得到相同的结果吗?

你能否验证当你以用户A的身份登录,并且“放错了”会话cookie(删除它),你还能得到你想要的信息吗?如果是这样,认证处理的方式可能有问题。

希望这会有所帮助!

您可能需要考虑进行某种会话验证,例如在会话中存储IP地址并在会话中的地址与当前用户的IP不匹配时销毁该会话。

当然,如果IP不匹配,您可以为用户强制新会话而不是销毁它。我觉得像这样将工作:

session_start(); 

if (isset($_SESSION['ip'])) { 
    if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) { 
     session_regenerate_id(); 
     session_destroy(); 
     session_start(); 
     $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
    } 
} else { 
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; 
}