php--session使用

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

2.session_start()
_SESSION['a'] = '123';_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:
savePath = "./session_save_dir/";lifeTime = 24 * 3600;
session_save_path(savePath); session_set_cookie_params(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。输入及返回均为字符串。

<?php
    session_start(); 
    echo session_id();
    // 输出 dqr58dnuqj2gufvg4o3tmjb9v4
?>

设置 session_id()
<?php
    session_id("NowaMagic");
    session_start(); 
    
    echo session_id();
    // 输出 NowaMagic
?>

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程序中设置,如下例程序所示:

<?php
if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>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()这个函数,具体做法如下:

<?php
session_start(); // 启动Session 
$_SESSION['count']; // 注册Session变量Count 
isset($PHPSESSID)?session_id($PHPSESSID):$PHPSESSID = session_id(); 
// 如果设置了$PHPSESSID,就将SessionID赋值为$PHPSESSID,否则生成SessionID 
$_SESSION['count']++; // 变量count加1 
setcookie('PHPSESSID', $PHPSESSID, time()+3156000); // 储存SessionID到Cookie中 
echo $count; // 显示Session变量count的值 
?>

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

<?php
// 初始化会话。
// 如果要使用会话,别忘了现在就调用:
session_start();

// 重置会话中的所有变量
$_SESSION = array();

// 如果要清理的更彻底,那么同时删除会话 cookie
// 注意:这样不但销毁了会话中的数据,还同时销毁了会话本身
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(),"", -1,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// 最后,销毁会话
session_destroy();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Se...
    chinariver阅读 10,958评论 1 49
  • Session的声明与使用 Session的设置不同于Cookie,必须先启动,在PHP中必须调用session_...
    寻回骄傲阅读 7,988评论 0 18
  • 背景在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cooki...
    时芥蓝阅读 6,942评论 1 17
  • 以前我喜欢翻报纸看新闻。 每天必看《南方都市报》《佛山日报》和《珠江商报》,离开传媒集团以后,似乎对报纸的情有独钟...
    芝士_亲子拆书阅读 3,720评论 0 1
  • 8:30-10:30,初二一对一,学生:苏中智 知识内容:今天继续勾股定理题型讲解 方法:45度直角三角形三边关系...
    学虎教育江河老师阅读 2,555评论 0 0