繁体   English   中英

访问会话变量和性能

[英]Accessing Session variable and performance

我内部有一个Web应用程序,需要检查用户是否具有足够的权限/角色/权限来访问页面。 我已经在具有USER_IDROLE_ID的表中设置了用户权限。 当用户登录到应用程序时,我将读取该用户的记录,并构造一个字符串并分配给会话变量。 当登录的用户访问每个页面时,我将从会话变量中读取值,然后解析该字符串,然后检查该用户是否具有足够的权限分配给它。

现在,我担心访问每个页面负载中的会话变量是否会影响性能。 有其他解决方法吗?

您应该会看到性能的净增长。

加载会话将花费一些资源,但是通常比从数据库检索记录所需的资源少得多,这可能涉及创建连接,认证,解析查询,检索记录并通过数据库发送记录。网络。 相比之下,从硬盘驱动器中删除会话文件要快得多。

听起来确实像您在尝试过早优化。 您应该等待一会儿,然后进行监视以查看瓶颈的真正位置。

不,它不会以明显的方式影响网站的性能(除非您每秒有数百个用户)。

但我注意到了一些:

(...)我将读取该用户的记录,并构造一个字符串并将其分配给会话变量。 当登录的用户访问每个页面时,我将从会话变量中读取值,然后解析字符串(...)

哈! 看到,会话不过是在session_start()上编码和解析的字符串(通常,为此使用serialize()unserialize() )。 您无需手动编码将要存储在会话中的数据,它已经为您完成(并且definitley比任何自定义方法都快,因为这些功能是在核心中实现的)。

如果您使用PHP本机会话处理程序,则无论您是否访问会话数据,都可能会在使用该会话的每个请求中检索会话数据。 并且由于默认的会话处理程序使用文件来存储数据,因此也会导致在每次请求时都读取文件。

如果要对此进行优化,则可以在其中存储会话的地方使用某种缓存。也许是诸如APCMemcache之类的内存缓存(另请参见session_set_save_handler函数的此注释 )。

除了上述格雷格所说的。

php中有2种会话类型。 存储在数据库中的会话和存储在文件中的会话(通常在/ tmp / session_something中);

数据库选项在创建套接字和发送/检索数据方面有开销。 它具有诸如会话能够在多台服务器/机器之间持久化的优点。

将会话信息存储到文件中的第二个选项可能是性能最佳的,因为像Linux这样的操作系统可以缓存/缓冲对内存中文件的读写操作。

如此简短的答案是,甚至不必担心开销,它不是什么,不是诱饵,但是如果您真正关心性能,则不会使用PHP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM