2010-01-11 86 views
5

没有任何机构对如何整合基于cookie的会话系统有任何信息/链接?我已经使用了file/mysql,并且正在使用memcached。我想玩apc会议,但是我想我会去吃饼干,只是我不太了解它。php:基于cookie的会话

我想我会写我自己的会话处理程序类吗?

+0

我不确定我关注。你的意思是将会话数据存储在cookie中?这是一个好主意吗? – 2010-01-11 19:07:54

+0

请注意,Cookie只能存储最多4KB的数据。这通常是为什么你没有看到基于cookie的会话存储。还要考虑到许多用户将cookies完全关闭或设置为使用浏览器安全策略限制访问。 – 2010-01-11 19:09:56

+1

@cballou:定期的旧会话通常也使用cookie。他们只是存储SESSID,其余的数据存储在服务器上。虽然我认为如果cookie被禁用,PHP会尝试将SESSID填充到GET参数中。 – mpen 2010-01-12 03:01:05

回答

5

在PHP会话数据通常存储在一个文件中。存储在cookie中的唯一东西是会话标识符。当启用会话并找到有效的会话cookie时,PHP会将用户会话数据从文件加载到超级全局,称为有趣的SESSION。

基本会话开始时使用session_start();在任何文本发送到浏览器之前调用。然后使用简单的数组索引将项目添加到会话对象或从会话对象中删除,例如。

$_SESSION['favcolour'] = 'blue'; 

后...

$favcolour = $_SESSION['favcolour']; 

基本的cookie仅会话(没有本地存储)可以通过调用来创建

set_cookie('favcolour','blue'[,other params]); 

之前的任何文本发送到浏览器,然后从cookie中检索超全球

$favcolour = $_COOKIE['favcolour']; 

如果仅执行Cookie会话,则不需要拨打session_start()

可选的[其他PARAMS]都比较先进,可以读到这里http://www.php.net/manual/en/function.setcookie.php

会议可以成为一个非常复杂的讨论,我建议做了其中的一些较轻的工作,然后扩大你的知识。

DC

你想知道的关于PHP会议

http://www.php.net/manual/en/book.session.php

DC

要重复使用PHP的会话处理代码,你将需要添加使用session_set_save_handler然后写处理程序在那个处理程序中完全不做任何事这是因为它在输出到浏览器之后被调用是关闭的,因此你不能向浏览器发送任何东西。

在将非标题数据写入浏览器之前,请使用set_cookie函数并将$ _SESSION数组的内容(在序列化和加密之后)存储到cookie中。当应用程序启动时,您可以读取cookie,将其解密并将其放入$ _SESSION数组中。

这是一个很快的提示,该怎么做,因为我从来没有做过,我更愿意写我自己的所有cookie代码。可能有一些疑难问题,但不难,少数测试应该找到任何问题。

DC

+0

我可能不会去cookie,但特别是如果你不希望用户篡改(或读取)数据。 – mpen 2010-01-12 03:03:04

+0

如果您的网站文件非常繁忙,则会话资源密集。但如果我想要安全性高于一切,我会使用数据库,因为可以读取文件。 – DeveloperChris 2010-01-12 03:08:37

+2

我不需要知道如何使用会话。我完全明白这一点。基于cookie的会话(不是cookie中的标识符存储)是最小化服务器数据库/文件/缓存查找的数量并将会话的所有数据存储在加密的cookie中的有效技术。我想这里没人理解我的意思。 – onassar 2010-01-13 17:18:58