php里有好多session save path.save_path,哪个是真是的啊

php将session存到数据库中的方法
php中的session默认是保存在文件中,具体的默认配置是:
session.save_handler=files
session.save_path="c:\windows\temp"
然而实际访问时如果这些session文件不使用session_destroy()或手工清理活被垃圾收集器回收的话会一直存在
如果用户访问量很大的话,那么session路径中文件就会很大,这时就会导致读取的效率低下,想一下上万个文件在其中想读取的话真的很费时间的,于是想着可以保存到数据库中就试一下吧。
闲言少叙,上代码:
&&& $conn=
mysql_connect('localhost','root','admin') or die('数据库连接失败');
catch(Exception $e)
error_log($e-&getMessage());
error_log('arrive here');
mysql_select_db('test',$conn) or die('数据库中没有此库名');
mysql_query('set names
utf8');&&&
&&& function
my_open($save_path,$session_name)
error_log('in my_open()');
&&& return
&&& function
my_close()
&&& return
&&& function
my_read($id)
&&& global
&&& $sql =
"select session_data from tb_session where session_key='$id'";//and
session_time&$time
&&& $result =
mysql_query($sql,$conn);
&&& $row =
mysql_fetch_array($result);
return& $row['session_data'];
&&& return
&&& function
my_write($key,$data)
&&& global
&&& $time =
time()+10*60;
$overdue_time = date('Y-m-d H:i:s',$time);
&&& $sql =
"select session_data from tb_session where session_key='$key' ";
//and session_time&'$overdue_time'
error_log("in my_write(),sql=$sql");
&&& $result =
mysql_query($sql,$conn);
error_log("in my_write(),result=$result");
if(mysql_num_rows($result)===0)
&&& $sql =
"insert into tb_session
values('$key','$data','$overdue_time')";
error_log("in my_write(),111,sql=$sql");
&&& $result =
mysql_query($sql,$conn);
&&& $sql =
"update tb_session set
session_data='$data',session_time='$overdue_time' where
session_key='$key'";
error_log("in my_write(),222,sql=$sql");
&&& $result =
mysql_query($sql,$conn);
&&& return
&&& function
my_destroy($key)
&&& global
&&& $sql =
"delete from tb_session where session_key='$key'";
&&& $result =
mysql_query($sql,$conn);
&&& return
&&& function
my_overdue($maxlifetime)
&&& global
$overdue_time = date('Y-m-d H:i:s',time());
&&& $sql =
"delete from tb_session where
session_time&'$overdue_time'";
&&& $result =
mysql_query($sql,$conn);
&&& return
//session_cache_limiter('private'); //设置缓存方式
//session_cache_expire(10);//设置缓存时间,表示180分钟
//session_module_name();
session_set_save_handler('my_open','my_close','my_read','my_write','my_destroy','my_overdue');&&&
session_start();
以上代码放入到文件session_db.php中,
然后每一个文件头最上方引用一下include_once('session_db.php')即可。
另外,在php.ini中要将session.save_handler设置为"user"即可。
这样就可以将数据库保存到mysql的tb_session表中,可以有很多人访问,再也不用担心访问的人过多导致session_temp文件目录中的碎文件过多读取效率低下的问题了。
随辅:tb_session的数据库脚本:
CREATE TABLE `tb_session` (
& `session_key` varchar(30) NOT NULL,
& `session_data` varchar(60) DEFAULT NULL,
& `session_time` timestamp NOT NULL DEFAULT
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
& PRIMARY KEY (`session_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。用户名:tanzhenchao
文章数:155
评论数:45
访问量:73588
注册日期:
阅读量:1297
阅读量:3317
阅读量:447563
阅读量:1132745
51CTO推荐博文
1、基础知识1.1、概念session是服务器保持会话数据的一种方法,对应cookie是在客户端保持用户数据。1.2、出现理由HTTP协议的无状态1.3、PHP的Session设计构造Session分以下几部分:1)Session id用户Session的唯一标识(随机生成,具有唯一性,随机性)2)Session data保存用户状态信息(用户数据)3)Session fileSession的存储方式,文件存储方式以"sess_"前缀+"Session_id"后缀的方式存储格式如下:sess_d3eom13a9r9p5i5nj923voqaf74)Session lifetimeSession生存时间(从Session的产生到生命周期的结束)1.4、工作原理1)客户端与服务器建立联系2)客户端将session id传递给服务器3)服务器根据session id建立相应的session id文件(session id序列化保存,读取时反序列化)唯一标识的方法有两种:cookie或者通过GET方式指定1.5、Session的缺点1)使用Session会影响系统性能(受文件系统设计影响,目录定义超过10000个文件非常耗时)2)Session文件大小1~2K,数量庞大的小文件影响硬盘IO性能1.6、Session配置文件1.6.1、默认配置文件的路径/etc/php.ini1.6.2、查找配置文件find&/&-name&php.ini显示如下:/etc/php.ini1.6.3、配置文件的参数vim编辑/etc/php.ini[Session]
session.save_handler&=&files&#session的存储方式
session.use_cookies=&1&#使用cookies在客户端保存会话
session.use_only_cookies&=&1&#去保护URL中传送session&id的用户
session.name&=&PHPSESSID&#session名称(默认PHPSESSID)
session.auto_start&=&0&#不启用请求自动初始化session
session.cookie_lifetime&=&0&#cookie存活时间(0为直至浏览器重启,单位秒)
session.cookie_path&=&/&#cookie的有效路径
session.cookie_domain&=&#cookie的有效域名
session.cookie_httponly&=&#httponly标记增加到cookie上(脚本语言无法抓取)
session.serialize_handler&=&php&#PHP标准序列化
session.gc_probability&=1
session.gc_divisor&=1000&#建议设置
#概率=session.gc_probability/session.gc_divisor(1/1000)
#页面访问越频繁概率越小
session.gc_maxlifetime&=1440&#过期时间(默认24分钟,单位秒)
session.bug_compat_42&=&off&#全局初始化session变量
session.bug_compat_warn&=&off
session.referer_check&=&#防止带有ID的外部URL
session.entopy_length&=&0&#读取的字节
session.cache_limiter&=&{nocache,private,pblic}&#HTTP缓冲类型
session.cache_expire&=&180&#文档过期时间(分钟)
session.use_trans_sid&=&1&#trans_sid支持(默认0)
session.hash_function&=&0&#hash方法{0:md5(128&bits),1:SHA-1(160&bits)}
session.hash_bits_per_character&=&5&#当转换二进制hash数据奥可读形式是,每个字符保留位数
session.save_path&=&"/var/lib/php/session"&#session&id存放路径1.6.4、session的保存目录1)默认路径:ls&-l&/var/lib/php/session显示如下:total&20
-rw-------.&1&apache&apache&&&31&Jan&13&08:41&sess_0bl5a7anlurcguu1t8qbmjkus5
-rw-------.&1&apache&apache&1320&Nov&24&16:40&sess_brv2cvkbhiqehpqu7tgabuvo81
-rw-------.&1&apache&apache&&&31&Jan&13&08:39&sess_d3eom13a9r9p5i5nj923voqaf7
-rw-------.&1&apache&apache&&&31&Jan&13&08:47&sess_j04uc0jaia0sr4qjdrull99hh0
-rw-------.&1&apache&apache&&&31&Jan&13&07:03&sess_me2vo12m5vnlpk1s0oj60mgqv1
-rw-------.&1&apache&apache&&&&0&Jan&13&08:41&sess_s4q1ivktojrm8ruv54ob12tol1
-rw-------.&1&apache&apache&&&&0&Jan&13&08:41&sess_u3mcdh4cstk7hts222)路径查找方法:&find&/&-name&session显示如下:/var/lib/php/session3)配置文件自定路径grep&session.save_path&/etc/php.ini会发现如下行:session.save_path&=&"/var/lib/php/session"注:session.save_path定义的路径需手动创建并赋予apache用户读写权限。4)分层子目录定义session.save_path&=&"N;[MODE;]/path"注:-- N定义目录层数(例如2,目录需手动创建)-- MODE定义单目录最大会话文件数量(默认8进制600)5)分层子目录的生成脚本源代码tar包含名称为“mod_files.sh”的分层子目录生成脚本,代码如下:#!/usr/bin/env&bash
if&[[&"$2"&=&""&]]&||&[[&"$3"&=&""&]];&then
&&&&&&&echo&"Usage:&$0&BASE_DIRECTORY&DEPTH&HASH_BITS"
&&&&&&&echo&"BASE_DIRECTORY&will&be&created&if&it&doesn't&exist"
&&&&&&&echo&"DEPTH&must&be&an&integer&number&&0"
&&&&&&&echo&"HASH_BITS(session.hash_bits_per_charactor)&should&be&one&of&4,&5,&or&6"
&&&&&&&exit&1
if&[[&"$2"&=&"0"&]]&&&&[[&!&"$4"&=&"recurse"&]];&then
&&&&&&&echo&"Can't&create&a&directory&tree&with&depth&of&0,&exiting."
if&[[&"$2"&=&"0"&]];&then
&&&&&&&exit&0
directory="$1"
depth="$2"
hashbits="$3"
hash_chars="0&1&2&3&4&5&6&7&8&9&a&b&c&d&e&f"
if&[[&"$hashbits"&-ge&"5"&]];&then
&&&&&&&hash_chars="$hash_chars&g&h&i&j&k&l&m&n&o&p&q&r&s&t&u&v"
if&[[&"$hashbits"&-ge&"6"&]];&then
&&&&&&&hash_chars="$hash_chars&w&x&y&z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&-&,"
while&[[&-d&$directory&]]&&&&[[&$(&ls&$directory&)&]];&do
&&&&&&&echo&"Directory&$directory&is&not&empty!&What&would&you&like&to&do?"
&&&&&&&options="\"Delete&directory&contents\"&\"Choose&another&directory\"&\"Quit\""
&&&&&&&eval&set&$options
&&&&&&&select&opt&in&"$@";&do
&&&&&&&&&&&&&&if&[[&$opt&=&"Delete&directory&contents"&]];&then
&&&&&&&&&&&&&&&&&&&&&echo&"Deleting&$directory&contents...&"
&&&&&&&&&&&&&&&&&&&&&rm&-rf&$directory/*
&&&&&&&&&&&&&&elif&[[&$opt&=&"Choose&another&directory"&]];&then
&&&&&&&&&&&&&&&&&&&&&echo&"Which&directory&would&you&like&to&choose?"
&&&&&&&&&&&&&&&&&&&&&read&directory
&&&&&&&&&&&&&&elif&[[&$opt&=&"Quit"&]];&then
&&&&&&&&&&&&&&&&&&&&&exit&0
&&&&&&&&&&&&&&fi
&&&&&&&&&&&&&&
&&&&&&&done
if&[[&!&-d&$directory&]];&then
&&&&&&&mkdir&-p&$directory
echo&"Creating&session&path&in&$directory&with&a&depth&of&$depth&for&session.hash_bits_per_character&=&$hashbits"
for&i&in&$hash_&do
&&&&&&&newpath="$directory/$i"
&&&&&&&mkdir&$newpath&||&exit&1
&&&&&&&bash&$0&$newpath&`expr&$depth&-&1`&$hashbits&recurse
done使用格式如下:bash&mod_files.sh&&directory&&&depth&&&hashbits&
directory&--&Session目录存放的根目录
depth&--&目录的深度
hashbits&--&哈希值(散列值)使用范例(N=2):bash&mod_files.sh&/var/lib/php/session&2&5生成的目录名称大致如下:-- 有传参下子目录名称一般以16进制"0 1 2 3 4 5 6 7 8 9 a b c d e f"字母命名-- 传参设置hashbits=5 以上加字母"g h i j k l m n o p q r s t u v"-- 传参设置hashbits=6 以上加字母"w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - ,"1.6.5、session的保存方式1)文件方式保存session.save_handler&=&files2)处理器方式(如mysql)session.save_handler&=&user1.6.6、开启客户端会话保存session.use_cookies&=&11.7、Session的同步场景:应用程序层有多台服务器,服务器之间做负载均衡,可通过如下方式解决:1)Session存储于数据库2)存储于共享存储(NFS)3)负载均衡器保持会话1.8、Session的管理脚本删除24分钟内没有被改变的Session文件cd&/var/lib/php/&find&-cmin&+24&|&xargs&rm1.9、内存直存Session的方法内存直接存储Session可以改善Session存储的性能(重启丢失),设置方法如下:vim编辑/etc/php.ini修改如下参数session.save_path&=&"/dev/shm"注:"/dev/shm"相当于内存入口2、实践部分2.1、基础环境配置请参阅如下文档配置PHP环境:2.2、yum源安装yum&-y&install&wget&tree2.3、配置部分2.3.1、step1官方下载源安装包cd&~
wget&http://cn2.php.net/distributions/php-7.0.2.tar.bz22.3.2、step2解压源码包tar&-xf&php-7.0.2.tar.bz22.3.3、step3执行设置脚本cd&php-7.0.2/ext/session
bash&mod_files.sh&/var/lib/php/session/&2&5
chown&-R&apache:apache&/var/lib/php/session/
chmod&700&-R&/var/lib/php/session/2.3.4、step4检查目录结构tree&/var/lib/php/session/显示如下:/var/lib/php/session/
│&&&├──&0
│&&&├──&1
│&&&├──&2
│&&&├──&3
│&&&├──&4
│&&&├──&5
│&&&├──&6
│&&&├──&7
│&&&├──&8
│&&&├──&9
│&&&├──&a
│&&&├──&b
│&&&├──&c
│&&&├──&d
│&&&├──&e
│&&&├──&f
│&&&├──&g
│&&&├──&h
│&&&├──&i
│&&&├──&j
│&&&├──&k
│&&&├──&l
│&&&├──&m
│&&&├──&n
│&&&├──&o
│&&&├──&p
│&&&├──&q
│&&&├──&r
│&&&├──&s
│&&&├──&t
│&&&├──&u
│&&&└──&v
│&&&├──&0
│&&&├──&1
│&&&├──&2
#中间有节删
1056&directories,&0&files2.3.5、step5检查目录权限ls&-l&/var/lib/php/session/2.3.6、step6重启httpd服务使PHP的Session相关设置生效/etc/init.d/httpd&restart2.3.7、step7增加测试代码:vim编辑/var/www/www.cmdschool.org/test.php创建如下代码:&?php
session_start();
$_SESSION["user_name"]="cmdschool.org";
echo&$_SESSION["user_name"];
echo&"&&a&href=\"test2.php\"&test2&/a&"
?&vim编辑/var/www/www.cmdschool.org/test2.php创建如下代码:&?php
session_start();
echo&$_SESSION["user_name"];
?&2.3.8、step8模拟DNS解析:notepad&%SystemRoot%\System32\drivers\etc\hosts建立如下映射:10.168.0.170&www.cmdschool.org2.3.9、step9测试与检查:1)浏览器测试http://www.cmdschool.org/test.php如上图所示:本页生成Session变量"user_name"并赋值"cmdschool.org"单击【test2】跳转页面如上图所示:本页输出Session变量"user_name"的值"cmdschool.org"2)日志检查tail&/var/log/httpd/error_log3)检查生成的Session文件tree&/var/lib/php/session显示如下:#前有节删
│&&&├──&0
│&&&├──&1
│&&&├──&2
│&&&├──&3
│&&&├──&4
│&&&├──&5
│&&&├──&6
│&&&├──&7
│&&&├──&8
│&&&├──&9
│&&&├──&a
│&&&├──&b
│&&&├──&c
│&&&├──&d
│&&&├──&e
│&&&├──&f
│&&&├──&g
│&&&├──&h
│&&&├──&i
│&&&├──&j
│&&&├──&k
│&&&├──&l
│&&&├──&m
│&&&├──&n
│&&&├──&o
│&&&│&&&└──&sess_no8luf5jctfd2igrqikpc6mji2
#后有节删文件查阅cat&/var/lib/php/session/n/o/sess_no8luf5jctfd2igrqikpc6mji2显示如下:user_name|s:13:"cmdschool.org";----------------------------------------------------------------------参考文件:PHP Session的工作原理:
PHP使用Session: CentOS Session配置:MySQL保存Session的代码: PHP多级目录设置方法:本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)后使用快捷导航没有帐号?
只需一步,快速开始
查看: 2624|回复: 5
php.ini里面的 session_save_path和session.save_path有什么分别啊?
UID339853在线时间 小时积分367帖子离线17396 天注册时间
中级会员, 积分 367, 距离下一级还需 133 积分
本帖最后由 omode 于
12:32 编辑
php.ini里面的
session_save_path
session.save_path
有什么分别啊?
session.save_path和session.cookie_path 设置置为
session_save_path = f:\temp
session.cookie_path = /
这里的session.save_path为什么要改成session_save_path?这里.怎么换成_了?
UID513442在线时间 小时积分5248帖子离线17396 天注册时间
session_save_path 没找到这个参数呀
只有下面的那个
UID640715在线时间 小时积分8帖子离线17396 天注册时间
新手上路, 积分 8, 距离下一级还需 42 积分
session.save_path 是php.ini配置的,相当于变量 默认是“”
他的方法是
session_save_path — Get and/or set the current session save path
相当与变量的set/get方法
这样的好处是.避免变量随意调用,不是万不得已,不要在session放变量
UID458827在线时间 小时积分589帖子离线17396 天注册时间
高级会员, 积分 589, 距离下一级还需 411 积分
恩,同意3#,这里要是有了变量,你懂得
UID561029在线时间 小时积分693帖子离线17396 天注册时间
高级会员, 积分 693, 距离下一级还需 307 积分
session.save_path&&只有这个。
UID174424在线时间 小时积分1337帖子离线17396 天注册时间
提示: 作者被禁止或删除。
Powered by72461人阅读
PHP语言(45)
PHP配置文件中session.save_path负责session文件的存放位置。
如果没有配置则不会生成session文件,如果配置的目录session.save_path = &E:/ttt&不存在,则会报错:
Warning: session_start() [function.session-start]: open(E:/ttt\sess_e0bd81c1df6, O_RDWR) failed: No such file or directory (2) in E:\APMServ5.2.6\www\htdocs\session\index.php on line 13
Warning: Unknown: open(E:/ttt\sess_e0bd81c1df6, O_RDWR) failed: No such file or directory (2) in Unknown on line 0
Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (E:/ttt) in Unknown on line 0
所以,如果需要生成session文件,需要检查配置文件.如果没有配置目录,则请将php.ini中的“;session.save_path = &/tmp&” 改为“session.save_path = &E:/yourdir&”,并切记在E盘根目录下新建,名为yourdir的文件夹。
设置完成后需要重启服务,然后设置生效。
可以再php文件中测试,是否设置成功。
$sessionpath = session_save_path();
if (strpos ($sessionpath, &;&) !== FALSE)
$sessionpath = substr ($sessionpath, strpos ($sessionpath, &;&)+1);
//获取当前session的保存路径
如果服务器是远程连接的,不在本地,不方便更改php配置文件,可以再程序中重置session目录。
&&& session_save_path('E:/ttt');
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3032328次
积分:11406
积分:11406
排名:第1358名
原创:120篇
转载:45篇
评论:167条
(1)(1)(1)(1)(1)(3)(1)(2)(1)(1)(1)(1)(1)(1)(1)(3)(2)(6)(6)(6)(12)(7)(5)(13)(10)(12)(22)(5)(1)(13)(5)(6)(5)(3)(2)(1)(3)(1)session_save_path-PHP手册
gt at psgam dot de
Note that you shouldn't use session_save_path() directly for performing file operations.
It returns the configuration option, not the directory.
As stated in /manual/en/ref.session.php#ini.session.save-path there can be a numeric argument separated with a semicolon in front of the "real" path.
I used the following code to get rid of it:
$sessionpath = session_save_path();
if (strpos ($sessionpath, ";") !== FALSE)
& $sessionpath = substr ($sessionpath, strpos ($sessionpath, ";")+1);
Doesn' to appear in the directory names, but hey.
designofgod at yahoo dot com
sometime you need to change session.save_path because server system distributed more then one machine and you can not reach php.ini file example sourceforge.net. Then you can do that with .htaccess file which is kind of configuration file for Apache under one directory. anyway I added
php_value session.save_path /home/groups/f/f4/f4l/tmp/
now my sessions work very well I hope :)
webmaster at gardenchemicals dot co dot uk
This is an absolute must if you have an important login on a shared server. Without it, other users of the server can do the following to bypass login:
* Visit login page, browse through cookies and grab the session id.
* Create a PHP script on their account that grabs and sets session variables for a given session id.
* Read and change any values for that session id (for example passwords or session keys), and therefore gain access to the protected area.
All users on web hosting should choose an dir below the HTTP directory struct, but within their user area to store the session files.
a9504778 at unet dot univie dot ac dot at
dont forget: if you use session_save_path on the page, that registers a variable, you have also to use session_save_path on all the pages, where you access the session-variable. under win32 you can use the double \\ to specify eg "c:\\temp\\"

我要回帖

更多关于 php session save 的文章

 

随机推荐