• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php优化session的使用

php 搞代码 3年前 (2022-01-23) 8次浏览 已收录 0个评论

php的session扩展可以将session数据存入任意容器,只要容器实现了php_session.h中的接口:

t%本文@来源gao@!dai!ma.com搞$$代^@码!网搞代gaodaima码ypedef struct ps_module_struct {	const char *s_name;	int (*s_open)(PS_OPEN_ARGS);	int (*s_close)(PS_CLOSE_ARGS);	int (*s_read)(PS_READ_ARGS);	int (*s_write)(PS_WRITE_ARGS);	int (*s_destroy)(PS_DESTROY_ARGS);	int (*s_gc)(PS_GC_ARGS);	char *(*s_create_sid)(PS_CREATE_SID_ARGS);} ps_module;

如果在php.ini中定义了session.auto_start = 1,session扩展在请求初始化阶段(rinit)会调用s_open并s_read数据。
如果在php页面中调用了session_start()(只有第一次调用生效),session扩展也会调用s_open并s_read数据。
但是对于一些涉及不到session数据的页面,如果也去读取session数据会造成性能上的浪费,如磁盘操作或网络操作。
所以要想个办法对涉及session数据和不涉及session数据的页面区别对待,但是处理代码需要是一致的。
想的办法就是去掉session.auto_start = 1改成session.auto_start = 0并对cookie中没有session_name的请求延迟调用session_start(),
如果cookie中没有session_name,调用session_start()时,session扩展会自动生成一个session_id并发送Set-Cookie头,头信息的输出要在页面输出内容前或者把页面内容放入输出缓冲延迟输出。
最终的实现方式如下:
auto_prepend_file:

<?phpif (isset($_COOKIE[session_name()])) {	define('SESSION_STARTED', true);	@session_start();} else {	ob_start();}

auto_append_file:

<?phpif (!defined('SESSION_STARTED') && $_SESSION) {	$session_copy = $_SESSION;	@session_start();	if (!$_SESSION) {		$_SESSION = $session_copy;	}	ob_end_flush();}

以上就介绍了php优化session的使用,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php优化session的使用
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址