Mar*_*tin 1 php session google-chrome
注意:我已经更新并重写了我的问题,以尝试逐步解决此问题。干杯。
我有一个问题,我不立即确定如何解决它。
我已经在HTTPS服务器上构建了安全的登录系统(如果值得的话,它在SSL实验室的评分为“ A”),并且运行良好,但是今天它拒绝登录并进行一些调试。 (我认为)发现了一些很奇怪的东西。
我在网站上进行会话处理时遇到了一些严重问题,不同的页面使用了相同的会话数据(当然)和相同的会话/ cookie设置,并且它们之间正确地传递了信息,但是浏览器的行为似乎就像有两个浏览器使用相同的会话数据访问相同的网站一样。
症状-因为我一直与页面生成的会话内容(唯一的哈希令牌)不一致,因此不适合登录表单中保存的相同数据(作为$_POST值),所以我发现整个站点中只有一行设置会话的值,该行必须运行两次。因此,我在会话中的表单页面上将计数器值设置为session['counter']。每次页面加载时,计数器+1。我的问题特别是这样的:
登录页面:
Opens page,
session hash-string is generated and saved to the post form.
session counter = counter + 1;
Form is filled in.
Run Code Online (Sandbox Code Playgroud)
登录身份验证”页面:
fails to verify the posted hash-string is the same as the session hash
string, despite there being no other cause for the session values to
change (well there must be, but I can't see it!)
Run Code Online (Sandbox Code Playgroud)
但是,然后返回登录页面,我看到计数器=最后一个值+ 2!同样,保存在服务器上的会话文件中记录的计数器值始终为登录页面上显示的值+1。
一些图像:
登录表单页面:请注意,这是在HTML输出上方,并且是代码上任何SESSION数据被编辑的最后一个位置。
输出:
请注意图1中与计数器相关的编号。
我的会话文件,此文件与此特定的浏览器会话相关,并且只有1个会话文件,因为我是该站点上唯一的浏览器。
该字符串CheckDrop是要比较的哈希值,但计数器位于12而不是11,如上图2所示。
尽管此工作位于子域上,但我的站点已通过HTTPS身份验证。
这个问题已经发生了最近3个小时,但是不一致的是,它在今天早40分钟左右就已经神奇地起作用了(就在发布此帖子之前)。但是我没有做任何改变环境的事情。
我之前已经比较了phpinfo数据和会话设置数据,这些数据在浏览器输出时看起来都是正确的。它似乎不是由我的设置引起的。
它发生在我PC上的不同浏览器上。
在花费数小时进行调试和解决之后,这似乎是浏览器问题。我已将页面重命名(其中一个页面称为索引,而在.htaccess中未将其定义为目录列表页面,这可能导致浏览器将其打开两次)。
我已经清除了所有相关数据:会话/数据库记录/浏览器历史记录,并且遇到了一些问题:
Firefox现在可以按预期的方式登录,计数器为count + 1并且登录有效,但是在Chrome上,无法在相同页面上进行完全相同的登录,并且浏览器似乎加载了两次counter = counter + 2。Chrome还会在每次加载时在数据库中保留两条记录,而不是预期的。
Chrome版本45.0.24 Firefox版本42.0
Page double计数并在Safari和Chrome上两次运行脚本。在Firefox,Opera和MSIE上,它可以按预期工作。
任何想法为什么会这样?
我该如何解决这个问题?
最初的问题是由网页的命名引起的,有一个名为“ index.php”的网页,但是此页面不是索引,而是“ loggedIn.php”是该站点的索引页面,如 .htaccess
拥有一个不是索引的index.php页面似乎会使很多浏览器感到困惑。通过重命名所有页面并设置index.php页面(使用PHP标头将用户重定向到合适的页面)(基于是否登录)解决了该问题的一部分。
Chrome和Safari仍然存在问题。
长期阅读有关Chrome的许多问题后,该解决方案坦率地说是可悲的,
https://code.google.com/p/chromium/issues/detail?id=64810
如果没有某些标记元素,则此链接列出了与此Chrome双重加载问题相关的各种问题。由于我上面的页面非常简单,因此应用了很多内容,但是Google Chrome浏览器将以静默方式请求该favicon.ico文件,然后如果找不到该文件,将重新加载该页面,但仅输出第一页(从Chrome内存缓存中)。
这是Chrome中一个非常愚蠢的错误,它使我花了大部分时间。Safari仍然坚持两次加载PHP脚本,
| 归档时间: |
|
| 查看次数: |
3125 次 |
| 最近记录: |