-1

哪种方式是在 php 中存储会话的最有效方式(用于登录或用户相关数据)?

最好的事情是数据库还是使用 php 中内置的 $_SESSION?对于更大的网站和总体速度,哪一个最有效?

4

2 回答 2

0

这是一个非常糟糕的问题,因为它没有定义一个单一的答案,但我会继续尝试满足您的需求

首先将进行检查,因此如果用户名不等于数据库或电子邮件中的一个,并且一旦您可以检查数据库中的用户名并成功为其创建功能,请进行适当的错误检查

你需要有一个用户登录,如果凭据是真实的,那么

 session_start();

    function logged_in()
    {
    return (isset($_SESSION['user_id'])) ? true : false;
    }





if ($login === false)
        {
            $errors[] = 'Wrong username/password combination';
        } else 
        {
            $_SESSION['user_id'] = $login;
            header('Location: index.php');
            exit();

强烈推荐试试这个系列

https://www.youtube.com/watch?v=9kyQGBABA38&list=PLE134D877783367C7 你会在两天内看完,但在这个问题上会有很好的基础

我希望我有所帮助

于 2013-06-15T22:28:37.490 回答
0

绝对没有理由相信内置的 PHP 机制很慢或很糟糕。它正在写入文件,非常适合大约 90% 的网站使用的单服务器场景,它经过全面测试并且可以正常工作。内部工作确实使用已编译的 C 语言,以便通过此存储获得最佳性能。

无论您自己做什么,都必须用较慢的 PHP 实现,或者您必须从事用 C 语言创建 PHP 会话保存处理程序的业务。

因此,如果您真的开始使用前面的负载均衡器进行多服务器设置,并且没有配置粘性,那么您才需要一个可从所有网络服务器访问的会话存储。已经有很多解决方案:

Memcached - 安装 memcached 扩展时,还有memcached 会话保存处理程序

你也可以试试 Zend Server 自带的 Zend Session Cluster。

您可以尝试编写自己的会话处理程序,但您必须确保正确锁定!否则并发请求将覆盖彼此的会话数据。这就是迄今为止我看到的大多数代码都失败的地方,即使是像Symfony 2 这样的成熟框架仍然使用非原生存储

只有在使用内部会话保存处理程序(并且编码正确)时,PHP 才会自行锁定,因此实际上每个会话 ID 只能运行一个脚本。所有其他人都停止了对 的调用session_start()

如果您认为现有的保存处理程序都不符合您的要求,那么您必须自己实现一些东西,但您的问题听起来不像您已经习惯了集群网络服务器环境。

关于“什么是最有效的”?有效还是高效?还是高性能?还是最快的?没有人会知道您是否无法命名要测量的数字!以及如何测量。

即使知道了,也根本无法事先知道。试想一下有人说“使用数据库,这总是更快”,然后您最终在共享托管系统中遇到了一个糟糕的提供程序,该系统的数据库系统过载,完全没有性能,您会说“这不可能数据库比文件快” - 你是对的。出于同样的原因,说比不使用数据库更快也是一个谎言。

衡量绩效!改变一些东西,看看它是否更快。如果是,请留在那里,否则返回。

于 2013-06-16T11:53:27.970 回答