访问会话变量和性能

时间:2009-04-30 11:08:21

标签: php performance session

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

现在我担心在每个页面加载中访问会话变量是否会影响性能。有没有其他方法可以解决这个问题?

4 个答案:

答案 0 :(得分:2)

你应该看到性能的净增益。

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

听起来好像是在尝试过早优化。您应该等待一段时间然后监视,看看您的瓶颈在哪里。

答案 1 :(得分:2)

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

但我注意到了一些事情:

  

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

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

答案 2 :(得分:1)

如果您使用native session handler of PHP会话数据,则无论您是否访问会话数据,都可能会在每个请求中检索会话。而作为存储数据的default session handler uses files,它将导致在每个请求上读取文件。

如果要优化它,可以使用某种缓存来存储会话。也许是内存缓存,如APCMemcache(另请参阅this comment to the session_set_save_handler function)。

答案 3 :(得分:0)

补充Greg上面所说的内容。

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

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

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

如此简短的回答是,甚至不担心它的开销是什么,不是火焰诱饵,但如果你真的关心性能,你就不会使用PHP。