全局变量如何在php中工作?

时间:2015-04-02 18:14:51

标签: php session redis global-variables

我是一名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的错误数据?但在应用程序中一切正常,任何人都可以向我解释我做错了什么?

1 个答案:

答案 0 :(得分:0)

PHP没有任何应用程序级别的持久性。使用APC或memcache存储此类值。您不仅可以从任何页面访问这些值,还可以从任何服务器以更快的方式访问这些值。

但是这个用户全局变量是否会在多个用户之间共享,这可能会导致冲突?每个用户都有副本吗? @Dude

这取决于。这取决于你。 Memcache(顺便说一句,我推荐你memcached)它是"喜欢" 一个带有键和值的表

+-------+--------+
|  Key  | Value  |
+-------+--------+
| User1 | Value1 |
| User2 | Value2 |
| User3 | Value3 |
+-------+--------+

您可以编码,以便每个键都可以是用户ID,值可以是对象,序列化对象或其他任何值。在这种情况下,您不会有任何冲突。但是,如果你愿意,你可以共享相同的资源(为每个人使用相同的密钥),但我不认为这是你想要的)