php会话保存数据技术 php聊天记录怎么保存( 二 )


connect($memcachehost,$memcacheport)ordie("Couldnotconnect");$memcache-set('key','缓存的内容');$get=$memcache-get($key);//获取信息?
八、apache缓存模块
apache安装完以后,是不允许被cache的 。大理IT培训认为如果外接了cache或squid服务器要求进行web加速的话,就需要在htttpd.conf里进行设置,当然前提是在安装apache的时候要激活mod_cache的模块 。
php 怎样暂时保存数据 cookie session 只能用在顶部 还有其他方法吗保存数据php会话保存数据技术的方法很多php会话保存数据技术 , 除php会话保存数据技术了cookie session外 , 可以生成临时文件来保存数据,也可以用php的memcached组件把数据保存在内存里 。
PHP中SESSION的问题Session 和 Cookie 有什么关系
Cookie 也是由于 HTTP 无状态的特点而产生的技术 。也被用于保存访问者的身份标示和一些数据 。每次客户端发起 HTTP 请求时php会话保存数据技术,会将 Cookie 数据加到 HTTP header 中php会话保存数据技术,提交给服务端 。这样服务端就可以根据 Cookie 的内容知道访问者的信息了 。可以说,Session 和 Cookie 做着相似的事情,只是 Session 是将数据保存在服务端,通过客户端提交来的 session_id 来获取对应的数据;而 Cookie 是将数据保存在客户端,每次发起请求时将数据提交给服务端的 。
上面提到,session_id 可以通过 URL 或 cookie 来传递 , 由于 URL 的方式比 cookie 的方式更加不安全且使用不方便,所以一般是采用 cookie 来传递 session_id 。
服务端生成 session_id,通过 HTTP 报文发送给客户端(比如浏览器) , 客户端收到后按指示创建保存着 session_id 的 cookie 。cookie 是以 key/value 形式保存的,看上去大概就这个样子的:PHPSESSID=e4tqo2ajfbqqia9prm8t83b1f2 。在 PHP 中,保存 session_id 的 cookie 名称默认叫作 PHPSESSID , 这个名称可以通过 php.ini 中 session.name 来修改 , 也可以通过函数 session_name() 来修改 。
为什么不推荐使用 PHP 自带的 files 型 Session 处理器
在 PHP 中,默认的 Session 处理器是 files , 处理器可以用户自己实现(参见:自定义会话管理器) 。我知道的成熟的 Session 处理器还有很多:Redis、Memcached、MongoDB……
为什么不推荐使用 PHP 自带的 files 类型处理器 , PHP 官方手册中给出过这样一段 Note:
无论是通过调用函数 session_start() 手动开启会话,还是使用配置项 session.auto_start 自动开启会话, 对于基于文件的会话数据保存(PHP 的默认行为)而言,在会话开始的时候都会给会话数据文件加锁 ,  直到 PHP 脚本执行完毕或者显式调用 session_write_close() 来保存会话数据 。在此期间 , 其php会话保存数据技术他脚本不可以访问同一个会话数据文件 。
上述引用参见:Session 的基本用法
为了证明这段话 , 我们创建一下 2 个文件: 文件:session1.php
?php
session_start();
sleep(5);
var_dump($_SESSION);
?
文件:session2.php
?php
session_start();
var_dump($_SESSION);
?
在同一个浏览器中,先访问 ,然后在当前浏览器新的标签页立刻访问。实验发现,session1.php 等了 5 秒钟才有输出 , 而 session2.php 也等到了将近 5 秒才有输出 。而单独访问 session2.php 是秒开的 。在一个浏览器中访问 session1.php,然后立刻在另外一个浏览器中访问 session2.php 。结果是 session1.php 等待 5 秒钟有输出,而 session2.php 是秒开的 。
分析一下造成这个现象的原因:上面例子中 , 默认使用 Cookie 来传递 session_id,而且 Cookie 的作用域是相同 。这样,在同一个浏览器中访问这 2 个地址,提交给服务器的 session_id 就是相同的(这样才能标记访问者 , 这是我们期望的效果) 。当访问 session1.php 时,PHP 根据提交的 session_id,在服务器保存 Session 文件的路径(默认为 /tmp,通过 php.ini 中的 session.save_path 或者函数 session_save_path() 来修改)中找到了对应的 Session 文件,并对其加锁 。如果不显式调用 session_write_close(),那么直到当前 PHP 脚本执行完毕才会释放文件锁 。如果在脚本中有比较耗时的操作(比如例子中的 sleep(5)),那么另一个持有相同 session_id 的请求由于文件被锁 , 所以只能被迫等待,于是就发生了请求阻塞的情况 。

推荐阅读