0

管理员和用户都可以登录。登录后,他们可以浏览相同的页面。

管理员和用户可以选择插入、编辑和删除项目。

管理员可以为任何人创建的任何项目执行所有这 3 项任务。但是用户只能对他/她自己创建的项目执行这些任务。所以在数据库中跟踪是谁创建了一个特定的项目。

$_SESSION['admin_user']如果是管理员则分配 1,否则分配 2。此会话变量决定页面是针对管理员还是任何其他用户。

但是,如果管理员登录,然后另一个用户也从同一个浏览器登录,那么会话变量将获得后一个值。

无论出于何种原因,让我们假设管理员和用户同时登录同一个浏览器的这种情况可以发生。

如何使即使这两种不同类型的用户以上述方式进入站点,他们都将获得相应的页面(即当管理员单击菜单链接时,他/她将获得预期的页面并且相同)同时来自同一浏览器的任何用户都是如此)?

4

2 回答 2

0

如果您的用户使用同一个浏览器,那么您也不能中继正常的会话功能,因为它在浏览器中共享。这就是为什么您可以打开新窗口/标签,例如。

因此我们不能使用 cookie 来创建会话,而是需要在 URL 中的每个请求中发送会话信息。

选项 1:使其成为单页网站并使用 ajax 加载数据。

选项 2:在用户 URL 中包含会话 ID:s

编辑:一个更简单的选择是让您的用户使用隐身模式。然后会话不会与其他实例共享。我有时会用它在不同的 gmail 帐户上登录两次。(不同的浏览器厂商用自己的名字来调用函数)

Edit2:首先,会话是由服务器在浏览器中设置 cookie 创建的。该 cookie 仅包含一个“随机”字符串。该字符串可以对应于服务器上的文件(最常见)或数据库中的一行(如果您有多个 Web 服务器前面有负载均衡器,则很实用。如果另一个用户在哪里猜到这个随机字符串,他将获得访问权限到用户会话(这也称为会话劫持)。

您可以将会话保存在 URL 中,而不是将会话存储在 cookie 中,例如http://www.example.com/?sess_id=jdR3Tfs. 您可以自己轻松地构建此逻辑,但在大多数 Web 框架中都有帮助程序来执行此操作,例如在 PHP 中

在 php.ini 中设置

session.use_cookies=0
session.use_trans_sid=1 

有时需要在上面的安排中手动获取会话 ID,如果我没记错的话应该是这样的:

session_id($_GET['sessionid']);
session_start();

或者

session_id($_GET['PHPSESSID']);
session_start();

为了确保您可以直接查看print_r($_GET)或查看创建的 URL。

否则,您可以手动进行更多操作

<?php
// testpage.php
session_start();
if (isset($_SESSION['test']){
    $_SESSION['test'] = 'Back again!';
}
$_SESSION['test'] = 'Hello world!';
?>
<p><?php echo $_SESSION['test']; ?></p> 
<a href="testpage.php?<?php echo htmlspecialchars(SID); ?>">Click me</a>.

编辑 3:另一种方式,当您仍然可以使用 cookie 时,您的用户启用“隐私浏览”,请参阅有关如何在此处启用的更多信息http://techlogon.com/2012/05/10/comparison-of-private-在浏览器中浏览,即 chrome 和 firefox/

于 2012-11-16T06:48:27.347 回答
0

$_SESSION['admin_user'] 如果是管理员则分配 1,否则分配 2。此会话变量决定页面是针对管理员还是任何其他用户。

if ($_SESSION['user']==1){

echo 'wHAT ADMIN CAN DO normally all even delete'; 

}else if($_SESSION['user']==2){

echo 'Maybe only add , view , update'; 

}

请务必制作重定向标头以限制非用户进入页面

于 2012-11-16T06:17:13.453 回答