php之session

WBOY
Release: 2016-06-23 13:08:08
Original
848 people have browsed it

session是一种会话技术,它基于cookie,相比cookie具有更高的安全性。

1.session原理

如图所示,session会给客户端发送一个session id,同时在服务端建立一个session数据区,客户端在请求的时候提交session id,服务端通过这个session id在session数据区查找。客户端仅存了一个session id ,它具有一定的时效性,重要的信息还是保存在服务端的,所以session会比较安全。

2. session的操作

session_set.php

<?php//定义session数据文件的存储路径,windows下默认是C:\Windows\tempsession_save_path(getcwd().DIRECTORY_SEPARATOR.'temp');@session_start();echo session_id()."<hr>";//添加$_SESSION['name'] = 'tom';$_SESSION['age'] = 19;$_SESSION['height'] = 75.5;$_SESSION['edu'] = '小学';//修改$_SESSION['age'] = 22;//读取var_dump($_SESSION);//删除unset($_SESSION['edu']);echo "<hr>";var_dump($_SESSION);?>
Copy after login

来看看session保存数据的文件:

session数据区的内容都是通过序列化后的字符串保存的,读取的时候再执行反序列化,session 支持多种数据类型存储,而cookie只支持string.

3.seesion中客户端cookie属性设置

session的使用是基于cookie的,必须在客户端保存一个session id的cookie,那么服务端可以设置这个cookie的属性来告诉浏览器如何生成这个cookie:

<?php//定义session数据文件的存储路径,windows下默认是C:\Windows\tempsession_save_path(getcwd().DIRECTORY_SEPARATOR.'temp');session_name("MYPHPSESSID");//设置session_cookie名称, 默认是PHPSESSID/** *session_set_cookie_params($lifetime, $path, $domain, $secure, $httponly)  *$lifetime int 设置客户端cookie的有效期,默认会话结束时 *$path string设置cookie的有效路径 ,默认'/',可选参数 *$domain string 设置有效域,可选参数 *$secure boolean 是否仅在https下发送cookie 默认false,可选参数 *$httponly boolean 是否仅在http中可使用cookie 默认false,可选参数 *///设置cookie有效期60秒session_set_cookie_params(60, '/', '.phpcode.com', false, false) ;@session_start();echo session_id()."<hr>";$_SESSION['name'] = 'tom';?>
Copy after login

注意: session_set_cookie_params 必须要在 session_start()前设置。

4.session数据区垃圾回收设置

session数据区的数据随着用户对服务器的访问会产生越来越多的垃圾数据,所以有必须进行垃圾扫描和垃圾清理。当然服务器不可能时时去扫描哪些数据是过期了,那样服务器损耗很大,所以呢必须一定几率去触发,判断到是垃圾的就清理掉。

<?phpsession_save_path(getcwd().DIRECTORY_SEPARATOR.'temp');//设置cookie有效期60秒session_set_cookie_params(60, '/', '.phpcode.com', false, false) ;//设置为服务器被请求3次 有1次可能触发gc ,进行垃圾回收ini_set('session.gc_probability', '1');ini_set('session.gc_divisor', '3');//默认1440秒后就被当为垃圾(最后一次写+1440秒),gc的时候,把该session id对应的 session数据区删除//设置为10秒后为垃圾ini_set('session.gc_maxlifetime', '10');@session_start();echo  session_id();$_SESSION['name'] = 'tom';echo "<hr>";var_dump($_SESSION);?>
Copy after login

下面两个参数是设置触发垃圾扫描的概率
ini_set(‘session.gc_probability’, ‘1’);
ini_set(‘session.gc_divisor’, ‘3’);
设置多长时间后就是垃圾,可以被回收
ini_set(‘session.gc_maxlifetime’, ‘10’);

5.禁用cookie如何使用session

<?php//定义session数据文件的存储路径,windows下默认是C:\Windows\tempsession_save_path(getcwd().DIRECTORY_SEPARATOR.'temp');//在session_start 前设置以下两项ini_set('session.use_only_cookies', '0');ini_set('session.use_trans_sid', '1');@session_start();echo  session_id();//添加$_SESSION['name'] = 'tom';echo "<hr>";var_dump($_SESSION);echo "<hr>";include 'show.html';?>
Copy after login

show.html

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title>Insert title here</title>    </head>    <body>        <a href='session_get_no_cookie.php'>forbidden cookie</a>        <form method="post" action="session_get_no_cookie.php">            <input type="submit" value="submit"/>        </form>    </body></html>
Copy after login

session_get_no_cookie.php

<?php//定义session数据文件的存储路径,windows下默认是C:\Windows\tempsession_save_path(getcwd().DIRECTORY_SEPARATOR.'temp');if(isset($_GET['PHPSESSID'])){    session_id($_GET['PHPSESSID']);}else if(isset($_POST['PHPSESSID'])){    session_id($_POST['PHPSESSID']);}echo session_id().'<hr>';session_start();var_dump($_SESSION);
Copy after login

6.session如何持久化

通常来说session不提倡持久化。
如果非要持久化,如下设置:

session_set_cookie_params(PHP_INT_MAX);ini_set('session.gc_maxlifetime', PHP_INT_MAX);#注意一定要在session_start前设置!!
Copy after login

7.session和cookie区别和联系

联系:
Session基于COOKIE,session-id存储于cookie中,cookie数据存放在客户端浏览器上,session主要数据放在服务器上。

区别:

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!