php--session使用

1.sesion_start() 开启session
_SESSION['b']='jin';
_SESSION[]=array();
//session_destroy(_SESSION['a']); //注销变量
unset(_SESSION['c']);
echo session_id(); //每个session都有一个指定的ID

2.session_start()
_SESSION['b'] = '223';

3.setcookie(session_name(),session_id(),time()+3600);

setcookie(string name,string value,int expires,string path,string domain,int
secure,httponly)
expires失效日期,如果失效日期不设置,cookie将永远有效,除非关闭浏览器时自动删除cookie数据,如果为cookie设置的失效时间,浏览器将会记住,只要没到期,就存在。
path和domain域合起来指定URL或与cookie相关
secure关键字是在普通的HTTP链接中不发送cookie

4.void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure [, bool httponly]]]] )
设置与这个session相关联的session的细节来查看由会话控制设置的cookie内容\

5.如何修改SESSION的生存时间。
答:
方法1:将php.ini中的session.gc_maxlifetime设置为9999,然后重启apache,这是修改session文件在服务器的保存时间。
方法2:
lifeTime = 24 * 3600;
session_save_path(lifeTime);//这种情况只是cookie中找不到对应的session信息了,但是session还在服务器中。
session_start();

6.Session储存于服务器端(默认以文件方式存储session),根据客户端提供的session id来得到用户的文件,取得变量的值,session id可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录……。也就是说,session id是取得存储在服务上的session变量的身份证。当代码session_start();运行的时候,就在服务器上产生了一个session文件,随之也产生了与之唯一对应的一个session id,定义session变量以一定形式存储在刚才产生的session文件中。通过session id,可以取出定义的变量。跨页后,为了使用session,你必须又执行session_start();将又会产生一个session文件,与之对应产生相应的session id,用这个session id是取不出前面提到的第一个session文件中的变量的,因为这个session id不是打开它的“钥匙”。如果在session_start();之前加代码session_id($session id);将不产生新的session文件,直接读取与这个id对应的session文件。 按照上面的思想,我只要把session_id存在在cookie中就可以正常使用session了。

7.session_id()

session_id() 存取目前 session 代号。
语法: string session_id(string [id]);

本函数可取得或者重新配置目前存放 Session 的代号。若无参数 id 则表示只有取得目前 Session 的代号,加上参数则表示将 Session 代号设成新指定的 id。输入及返回均为字符串。



设置 session_id()

8.PHP配置文件中session.save_path负责session文件的存放位置。

如果没有配置则不会生成session文件,如果配置的目录session.save_path = "E:/ttt"不存在,则会报错:
Warning: session_start() [function.session-start]: open(E:/ttt\sess_e0b64760c92422d81c1d6202b66884f6, O_RDWR) failed: No such file or directory (2)

所以,如果需要生成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的保存路径  
    echo $sessionpath;  

如果服务器是远程连接的,不在本地,不方便更改php配置文件,可以再程序中重置session目录。
session_save_path('E:/ttt');

9.大多数据情况下我们对于session过期时间使用的是默认设置的时间,而对于一些有特殊要求的情况下我们可以设置一下session过期时间。
对此,可以在PHP中,设置php.ini,找到session.gc_maxlifetime = 1440 #(PHP5默认24分钟)
系统默认:
session.gc_probability = 1
session.gc_divisor = 1000
garbage collection 有个概率的,1/1000就是session 1000次才有一次被回收。
只要你的访问量大了,那就能达到回收的效果.
或者你也可以设置一下session.gc_divisor 的值,
比如:session.gc_divisor = 1,这样就能明显的看到SESSION过期的效果了.
我们最常用的是在php程序中设置,如下例程序所示:

60)
$_SESSION['last_access'] = time();
?>

session有过期的机制:
session.gc_maxlifetime 表示session 过期是一个小概率的事件,分别使用session.gc_probability和session.gc_divisor 来确定运行session 中gc 的概率 session.gc_probability和session.gc_divisor的默认值分别为 1和100。分别为分子和分母 所以session中gc的概率运行机会为1% 。如果修改这两个值,则会降低php的效率。所以这种方法是不对的!!
因此,修改php.ini文件中的gc_maxlifetime变量就可以延长session的过期时间了:(例如,我们把过期时间修改为86400秒)
session.gc_maxlifetime = 86400
然后,重启你的web服务就可以了。
session“回收”何时发生:
默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的

概率是gc_probability/gc_divisor

session.gc_probability = 1
session.gc_divisor = 100

PHP中的session永不过期
不修改程序是最好的方法了,因为如果修改程序,测试部一定非常郁闷,那么只能修改系统环境配置,其实很简单,打开php.ini设置文件,修改三行如下:
1、session.use_cookies
把这个的值设置为1,利用cookie来传递sessionid
2、session.cookie_lifetime
这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以PHP的 session不能永久使用! 那么我们把它设置为一个我们认为很大的数字吧,999999999怎么样,可以的!就这样。
3、session.gc_maxlifetime
这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除! 那么我们也把它设置为99999999。
就这样一切ok了,当然你不相信的话就测试一下看看——设置一个session值过个10天半个月的回来看看,如果你的电脑没有断电或者宕机,你仍然可以看见这个sessionid。
当然也可能你没有控制服务器的权限并不能像我一样幸运的可以修改php.ini设置,一切依靠我们自己也是有办法的,当然就必须利用到客户端存储 cookie了,把得到的sessionID存储到客户端的cookie里面,设置这个cookie的值,然后把这个值传递给session_id()这个函数,具体做法如下:


10.session_destroy()销毁一个会话中的全部数据,除了把服务器端的session清除,也要把浏览器的cookie清除

你可能感兴趣的:(php--session使用)