我是一名php新手,正在浏览retwis的代码作为redis教程。在浏览代码时,我遇到了以下片段
function isLoggedIn() {
global $User, $_COOKIE;
if (isset($User)) return true;
if (isset($_COOKIE['auth'])) {
$r = redisLink();
$authcookie = $_COOKIE['auth'];
if ($userid = $r->hget("auths",$authcookie)) {
if ($r->hget("user:$userid","auth") != $authcookie) return false;
loadUserInfo($userid);
return true;
}
}
return false;}
function loadUserInfo($userid) {
global $User;
$r = redisLink();
$User['id'] = $userid;
$User['username'] = $r->hget("user:$userid","username");
return true;}
那么代码在这里做的是,当用户打开说index.php时,我们调用isLoggedIn,如果用户满意认证,那么我们在 global $中加载用户信息(id和username)用户变量并使用其他php页面来显示与会话变量非常相似的信息。
我的问题是如何使用全局变量?整个应用程序是否共享全局变量(对于多个用户)?如果让我们说user1登录并且我们用user1凭证设置$ User然后user2登录,那么不会用user2的数据更改/覆盖$ User变量并显示user1的错误数据?但在应用程序中一切正常,任何人都可以向我解释我做错了什么?
答案 0 :(得分:0)
PHP没有任何应用程序级别的持久性。使用APC或memcache存储此类值。您不仅可以从任何页面访问这些值,还可以从任何服务器以更快的方式访问这些值。
但是这个用户全局变量是否会在多个用户之间共享,这可能会导致冲突?每个用户都有副本吗? @Dude
这取决于。这取决于你。 Memcache(顺便说一句,我推荐你memcached)它是"喜欢" 一个带有键和值的表
+-------+--------+
| Key | Value |
+-------+--------+
| User1 | Value1 |
| User2 | Value2 |
| User3 | Value3 |
+-------+--------+
您可以编码,以便每个键都可以是用户ID,值可以是对象,序列化对象或其他任何值。在这种情况下,您不会有任何冲突。但是,如果你愿意,你可以共享相同的资源(为每个人使用相同的密钥),但我不认为这是你想要的)