2010-11-23 137 views
3

这里是我的网页:什么导致重定向循环?

重定向页面: 如果用户有一个开放的会议,重定向到合适的资源 否则重定向到登录页面

登录页面: 如果用户登录信息是有效的,重定向到$ _SERVER ['HTTP_REFERER'] 其他显示登录页面

当您访问重定向页面时,它看到您没有有效会话并重定向到登录页面。然后您可以登录没有问题,但在身份验证后,我收到“此网页有一个重定向循环。”在Chrome中的页面。 (IE提供有效的登录细节并转到目标资源,提供无效登录和接收错误消息等),这不是真正的循环。但是我可以看到浏览器的困惑(从a到b再到a)。

任何想法如何我可以解决这个问题?

干杯

+1

问题可能出在$ _SERVER ['HTTP_REFERER'],你可能想在这里使用实际路径.. ??如果我的推荐人是你的重定向脚本,并且我有一个有效会话,它会看到会话有效并将我重定向到以前的重定向脚本。我希望我的应用程序架构正确 – 2010-11-23 19:39:38

回答

5

$ _ SERVER [“HTTP_REFERER”]永远是登录页面,因为你必须加载登录页面在您成功登录权利之前。因此,一旦您成功登录,引用者就是登录页面,因此登录页面会将您重定向到您仍然成功登录的登录页面,因此它会一遍又一遍地记录您。

而不是依靠$ _SERVER ['HTTP_REFERER']你应该存储他们试图获得的页面$ _SESSION或$ _COOKIE变量。根据您的设置,最有可能的会话会更好。

+0

这是原因,谢谢! – 2010-11-23 19:44:16

+0

不客气。我以前做过同样的事情。 – 2010-11-23 19:46:09

0

您可以让您的登录页面一次完成重定向(无需重定向回“重定向页面”)。

1

我的猜测是:

如果用户有一个会议,但不是有效的(例如:会话哈希不匹配),它就会被重定向到登录页面(因为他有一个会话)。但是当他到达那里时,你检查他是否有一个会话,他确实(但它不是有效的),所以你将他重定向到索引资源。在那里,你检查会话是否有效,但事实并非如此。所以你将他重定向到登录页面。等等......

如何解决它?在登录页面和其他资源中检查会话有效性(不仅仅是存在)。

当然,如果HTTP_REFERER登录,忽略它并转发到索引资源。

1

您应该经常检查$ _SERVER ['HTTP_REFERER']变量是否包含有效数据,因为用户代理提供此值,所以它不会被信任。

the php.net manual

The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted. 
2

提交您的登录信息后,$_SERVER['HTTP_REFERER']将是你的登录页面的URL,因为最后一页的用户看到的是形式对他们进行登录。

在重定向到登录页面之前,请考虑在PHP会话中存储'重定向到'网址。当你重定向到登录页面时,你也可以将它作为参数传递,但是我可以看到具有潜在安全缺陷的方法(例如将用户重定向到其他站点,添加虚假的HTTP头等)

相关问题