php.ini里面有这样一段 ; Define the probability that the 'garbage collection' process is started ; on every session initialization. ; The probability is calculated by using gc_probability/gc_divisor, ; e.g. 1/100 means there is a 1% chance that the GC process starts ; on each request.session.gc_probability = 1 session.gc_divisor = 100; After this number of seconds, stored data will be seen as 'garbage' and ; cleaned up by the garbage collection process. session.gc_maxlifetime = 1440这段的大体意思的:每个session初始化的时候都会开始一个GC(垃圾清除)进程 超过1440秒的session数据会被清除,概率是1%。就是说如果这个session数据超过了最长生存期就有1%的概率被清除。如果网站流量大可以把session.gc_divisor调大,否则拖累机器
to lzkd(浪子快刀): session_set_save_handler这个函数控制session后不会产生session文件,session_register("var")直接把数据写在文本里或者是数据库里面,具体由你控制。 (可能写进去的数据变量var有一些无用的前缀的数据) 当然这时候session_unregister和session_destroy函数就没什么用了,因为根本不 产生session文件,你可以参考手册里的这个例子,他是写进文本里面 <?php function open ($save_path, $session_name) { global $sess_save_path, $sess_session_name;
$sess_file = "$sess_save_path/sess_$id"; return(@unlink($sess_file)); }/********************************************* * WARNING - You will need to implement some * * sort of garbage collection routine here. * *********************************************/ function gc ($maxlifetime) { return true; }session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");session_start();// proceed to use sessions normally?>
php.ini..............
难道说没有别的办法去读取session内各变量的值,然后
再删除了吗?
给楼主提供点思路
利用session_set_save_handler控制session,把session写进数据库,
比如:
session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");
这样只要每次在页面开头session_start(),session就自动写进数据库。
其中read,write函数里控制session是否清除,可以利用time()函数跟数据库里的上次写进去的时间比较,如果用户30分钟没有换页面或是刷新,就认为用户已经离开了,执行删除操作。
现在我的session存放的地方是自己在页面上
session_save_path里设定的,没有放在服务器
php.ini设的目录里,所以我完全可以控制的了.
但,主要的问题是,现在有这种函数或者是命令
可以直接读出session所产生的那个文件里的
所有的变量值吗?多谢了...我只要知道是哪个函数就可以了.
<?php
//把那两个函数包含进来//读取
$file="0/sess_53e8dcf4a96c7d4ca125fab96b1acc2b";
$data=fread(fopen($file,"r"),filesize($file));//解码并输出
print_r(decodesession($data));?>
问题1、
$_SESSION就可以直接取到该用户的整个session文件的内容。运行下面的代码看看就知道了
<?
session_start();
$_SESSION['a'] = "a";
$_SESSION['aa'] = "aa";
print_R($_SESSION);
?>"如果能够将session中的值全部读出来,对于提高统计网站流量等数据的准
确性会有很大帮助"??
session文件里面的内容是经过了编码的,不管你怎么取session的变量的值,他都会将整个的session文件都解析的,
问题2:
apache默认是24小时后删除session文件好像。默认就可以实现不用你自己管的。
; Define the probability that the 'garbage collection' process is started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.session.gc_probability = 1
session.gc_divisor = 100; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440这段的大体意思的:每个session初始化的时候都会开始一个GC(垃圾清除)进程
超过1440秒的session数据会被清除,概率是1%。就是说如果这个session数据超过了最长生存期就有1%的概率被清除。如果网站流量大可以把session.gc_divisor调大,否则拖累机器
session_set_save_handler这个函数控制session后不会产生session文件,session_register("var")直接把数据写在文本里或者是数据库里面,具体由你控制。
(可能写进去的数据变量var有一些无用的前缀的数据)
当然这时候session_unregister和session_destroy函数就没什么用了,因为根本不
产生session文件,你可以参考手册里的这个例子,他是写进文本里面
<?php
function open ($save_path, $session_name) {
global $sess_save_path, $sess_session_name;
$sess_save_path = $save_path;
$sess_session_name = $session_name;
return(true);
}function close() {
return(true);
}function read ($id) {
global $sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "r")) {
$sess_data = fread($fp, filesize($sess_file));
return($sess_data);
} else {
return(""); // Must return "" here.
}}function write ($id, $sess_data) {
global $sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "w")) {
return(fwrite($fp, $sess_data));
} else {
return(false);
}}function destroy ($id) {
global $sess_save_path, $sess_session_name;
$sess_file = "$sess_save_path/sess_$id";
return(@unlink($sess_file));
}/*********************************************
* WARNING - You will need to implement some *
* sort of garbage collection routine here. *
*********************************************/
function gc ($maxlifetime) {
return true;
}session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");session_start();// proceed to use sessions normally?>
在此再次向各位表示真诚的谢意。非常感谢。等在下会运用了,会整理个帖出来,以此
来报答各位对在下的帮助。另,在下是第一次上CSDN,给分什么的,都
不太懂,如果有不对的地方,还请原谅。再次感谢 浪子快刀