为所有用户或只想登录的用户创建PHP会话?

问题描述:

目前,我的CMS为每个访问该网站的用户创建一个PHP会话。我正在考虑只为想要登录的用户创建一个会话。我在这里遇到的问题是,登录用户的一些UI元素在所有页面上,因此在每个页面请求中,系统必须检查用户是否登录,这意味着我没有其他选项可以在每个页面请求上启动会话?或者我错了?为每个用户创建会话是否正常,即使剂量不想登录?为所有用户或只想登录的用户创建PHP会话?

简而言之,我想知道是否A.在我的用例中有一个选项只为想要登录的用户创建一个PHP会话B.如果它认为不好的做法为每个用户创建一个会话,无论他是否想登录。如果情况并非如此,我可以留下他们真的...

+1

会话是不是一件坏事,除非你想存储在您的会话变量千兆字节的数据(和我所看到的网站在那里数据的岗位兆回来,在会话参数第四) – 2011-01-13 22:26:20

+0

谢谢!很高兴知道! – wowpatrick 2011-01-13 22:45:08

你没有(真实的)选择。你无法知道,用户是否登录(或没有)会话。

+0

所以我是对的摆在首位,如你所说,在我使用情况下,我没有其他的选择呢?不过,我想知道是什么,如果这是在一般认为“不好的做法”与否。 – wowpatrick 2011-01-13 22:30:46

+0

我想这是所有我想知道,谢谢! – wowpatrick 2011-01-13 22:43:00

难道你不能只是找一个空的$ _SESSION值来看看他们是否登录?

+0

纠正我,如果我错了,但如果我不启动会话(我想,以避免不希望登录,谁所有用户的事,如常客)在$ _SESSION永远是不存在的,所以这不是一个真正的选择。 – wowpatrick 2011-01-13 22:37:45

在大多数情况下,登录是通过会话进行管理的,因此您必须在页面开始处创建会话以确定它们是否已登录。你真的没有选择......这是不错的做法,这是常见的做法。

快速回答:

在您的用例中,为每个用户创建一个会话是完全正确的。会议是微不足道的,没有什么可担心的表现(就你的情况而言)。

你正在使用的方法并不差。事实上,我会说这是非常接近最佳做法。

长答案: 作为企业界的PHP程序员,我有6年以上的经验,无论他们是否登录,为每个用户创建一个会话是非常正常的事实。会话可以用于为用户提供许多方便的功能,即使他们没有登录 - 例如购物车等。您正在做的事情正确。如果你想提高性能,可以使用谷歌的Pagespeed和雅虎的YSlow等工具 - 他们会给你关于网站最佳实践的提示。

可能避免每次创建一个会话。那么如果会话文件很小?为什么在不必要时扩散它们?

这是我做的,本质:

检查传入请求会话cookie的存在,只有做session_start()如果你收到一个。

浏览网站(通常情况下)的退出用户不会发送会话cookie,因此他们不会触发session_start()。简单。

一旦有人登录到您的网站,并且您确实想开始一个会话(会话在您的应用程序和PHP意义上都是逻辑上的),然后使用session_start()等来处理设置cookie。

一旦有人注销,请确保您销毁会话Cookie,而不仅仅是PHP会话本身。

很明显,用户可能会阻止你的cookie操作并破坏他们,但他们可以这样做。