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

标签 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,如果用户满足身份验证,那么我们将用户信息(id 和用户名)加载到 global $ User 变量并在其他 php 页面中使用它来显示与 session 变量非常相似的信息。

我的问题是如何正确使用全局变量?全局变量不是跨应用程序共享的(对于多个用户)吗?如果假设 user1 登录并且我们使用 user1 凭据设置 $User 然后 user2 登录,那么 $User 变量是否会被 user2 的数据更改/覆盖并为 user1 显示不正确的数据?但是在应用程序中一切正常,谁能向我解释我做错了什么?

最佳答案

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

但是这个 User 全局变量不会在可能导致冲突的多个用户之间共享吗?每个用户都有自己的副本吗? @老兄

这取决于。这将取决于你。 Memcache(顺便说一句,我向您推荐了 memcached)它“像”一个包含键和值的表

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

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

关于php - 全局变量如何在 php 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29419711/

相关文章:

redis - 返回redis中集合内哈希存储的值

php - bit.ly重定向方法

php - 避免在 cakephp 中与两个不同域进行 session 匹配?

php - 注册表类的目的是什么?

java - 春java.lang.IllegalStateException : Cannot create a session after the response has been committed

session - symfony2中的Before-Action方法

redis - 带有 Spring Data Redis 2.0.3 的缓存管理器

many-to-many - 如何在redis中建立多对多关系

php - Zend Framework PHP 中页面的基本流程

php - 将一段文本编码为其等效的 HTML