【发布时间】:2015-04-10 22:18:12
【问题描述】:
好的,我已经看到了几种不同的重定向用户的方法,例如,当用户未登录或不允许查看页面并决定重定向时。
我将设置场景...假设,当用户提供了正确的用户名和密码时,会话变量$_SESSION['loggedin'] 被创建。现在,当这个用户转到logged_in_users_only.php 时,他可以愉快地看到该页面。但是,Danger Jim 出现了,他没有登录,然后转到 logged_in_users_only.php 并被重定向回主页(可能带有警告)
所以。这是我见过的两种主要方法,想知道它们中的任何一种是否有安全隐患,或者可能让 Danger Jim 看到logged_in_users_only.php 页面
示例 1
if(session_status()==PHP_SESSION_NONE) {
session_start();
}
if(isset($_SESSION['loggedin'])) {
//show content
} else {
header('Location: home.php');
exit;
}
示例 2
if(session_status()==PHP_SESSION_NONE) {
session_start();
}
if(!isset($_SESSION['loggedin'])) {
header('Location: home.php');
exit;
}
//show content
就个人而言,我一直采用第一种方法。我认为这是因为代码似乎很好地“被困”在括号内(也许我只是喜欢这样看,哈哈)。
但我很想知道示例 2 是否可以永远让 Danger Jim 看到内容。
【问题讨论】:
-
好吧,我会检查会话值是否与某种用户 ID 相同,但我认为两者之间没有太大区别。
-
Surley 示例 2 使
//show content代码更易于查看和阅读,因为它没有包含在 IF 中。除此之外,它们基本相同。 -
警告! @Goudgeld1 我没这么说:) 出口非常重要,但它也不是完美的编码风格。 header() 函数仅对浏览器有用(!),解析您的应用程序的非浏览器工具将能够覆盖浏览器重定向,因此对您的应用程序做坏事(=尝试卷曲页面,它会继续没有接受 header() 重定向)。
-
@Sliq O... 误读了。我认为这并不重要,但在阅读了header manual 之后,你是对的:P。即使过了这么多年,总有东西要学!
-
感谢所有的 cmets...当有人说不要使用
exit()大声笑时,我的胃确实有点转,但幸运的是 @Goudgeld1 清除了那个大声笑...我使用记事本++作为我的“IDE”(如果你可以这样称呼它)所以代码着色在那里不是问题......所以我想我会继续使用第一个例子,只是出于恶意,这样我就不必重新-将所有内容编码为标准化:/ ...即使我现在更喜欢第二个示例... :( ...也许有一天我会做到的,哈哈