本文主要解说php回话机制cookie和session。
cookie简介
Cookie是存储在客户端浏览器中的数据,我们经由过程Cookie来跟踪与存储用户数据。平常情况下,Cookie经由过程HTTP headers从服务端返回到客户端。多半web顺序都支撑Cookie的操纵,由于Cookie是存在于HTTP的标头当中,所以必需在其他信息输出之前举行设置,类似于header函数的运用限定。
PHP经由过程setcookie函数举行Cookie的设置,任何从浏览器发还的Cookie,PHP都邑自动的将他存储在$_COOKIE的全局变量当中,因而我们能够经由过程$_COOKIE['key']的情势来读取某个Cookie值。
PHP中的Cookie具有异常普遍的运用,常经常使用来存储用户的登录信息,购物车等,且在运用会话Session时一般运用Cookie来存储会话id来辨认用户,Cookie具有有用期,当有用期完毕今后,Cookie会自动的从客户端删除。同时为了举行平安掌握,Cookie还能够设置域跟途径,我们会在稍后的章节中细致的解说他们。
为了网站平安性起见,本站点暂时不供应Cookie变量显现功用,请自行在当地测试;
设置cookie
PHP设置Cookie最经常使用的要领就是运用setcookie函数,setcookie具有7个可选参数,我们经常使用到的为前5个:
name( Cookie名)能够经由过程$_COOKIE['name'] 举行接见
value(Cookie的值)
expire(逾期时刻)Unix时刻戳花样,默以为0,示意浏览器封闭即失效
path(有用处径)假如途径设置为'/',则全部网站都有用
domain(有用域)默许全部域名都有用,假如设置了'www.imooc.com',则只在www子域中有用
$value = 'test'; setcookie("TestCookie", $value); setcookie("TestCookie", $value, time()+3600); //有用期一小时 setcookie("TestCookie", $value, time()+3600, "/path/", "imooc.com"); //设置途径与域
PHP中另有一个设置Cookie的函数setrawcookie,setrawcookie跟setcookie基础一样,唯一的差异就是value值不会自动的举行urlencode,因而在须要的时刻要手动的举行urlencode。
setrawcookie('cookie_name', rawurlencode($value), time()+60*60*24*365);
由于Cookie是经由过程HTTP标头举行设置的,所以也能够直接运用header要领举行设置。
header("Set-Cookie:cookie_name=value");
cookie的删除与逾期时刻
经由过程前面的章节,我们相识了设置cookie的函数,然则我们却发明php中没有删除Cookie的函数,在PHP中删除cookie也是采纳setcookie函数来完成。
setcookie('test', '', time()-1);
能够看到将cookie的逾期时刻设置到当前时刻之前,则该cookie会自动失效,也就达到了删除cookie的目标。之所以这么设想是由于cookie是经由过程HTTP的标头来通报的,客户端依据服务端返回的Set-Cookie段来举行cookie的设置,假如删除cookie须要运用新的Del-Cookie来完成,则HTTP头就会变得复杂,实际上仅经由过程Set-Cookie就能够简朴明了的完成Cookie的设置、更新与删除。
相识道理今后,我们也能够直接经由过程header来删除cookie。
header("Set-Cookie:test=1393832059; expires=".gmdate('D, d M Y H:i:s \G\M\T', time()-1));
这里用到了gmdate,用来生成格林威治标准时刻,以便消除时差的影响。
session与cookie的异同
cookie将数据存储在客户端,建立起用户与服务器之间的联络,一般能够处理许多题目,然则cookie依然具有一些范围:
cookie相对不是太平安,轻易被盗用致使cookie诳骗
单个cookie的值最大只能存储4k
每次要求都要举行收集传输,占用带宽
session是将用户的会话数据存储在服务端,没有大小限定,经由过程一个session_id举行用户辨认,PHP默许情况下session id是经由过程cookie来保留的,因而从某种程度上来讲,seesion依赖于cookie。但这不是相对的,session id也能够经由过程参数来完成,只需能将session id通报到服务端举行辨认的机制都能够运用session。
运用session
在PHP中运用session异常简朴,先实行session_start要领开启session,然后经由过程全局变量$_SESSION举行session的读写。
session_start(); $_SESSION['test'] = time(); var_dump($_SESSION);
session会自动的对要设置的值举行encode与decode,因而session能够支撑恣意数据范例,包括数据与对象等。
session_start(); $_SESSION['ary'] = array('name' => 'jobs'); $_SESSION['obj'] = new stdClass(); var_dump($_SESSION);
默许情况下,session是以文件情势存储在服务器上的,因而当一个页面开启了session今后,会独有这个session文件,如许会致使当前用户的其他并发接见没法实行而守候。
删除与烧毁session
删除某个session值能够运用PHP的unset函数,删除后就会从全局变量$_SESSION中去除,没法接见。
session_start(); $_SESSION['name'] = 'jobs'; unset($_SESSION['name']); echo $_SESSION['name']; //提醒name不存在
假如要删除一切的session,能够运用session_destroy函数烧毁当前session,session_destroy会删除一切数据,然则session_id依然存在。
session_start(); $_SESSION['name'] = 'jobs'; $_SESSION['time'] = time(); session_destroy();
值得注意的是,session_destroy并不会马上的烧毁全局变量$_SESSION中的值,只要当下次再接见的时刻,$_SESSION才为空,因而假如须要马上烧毁$_SESSION,能够运用unset函数。
session_start(); $_SESSION['name'] = 'jobs'; $_SESSION['time'] = time(); unset($_SESSION); session_destroy(); var_dump($_SESSION); //此时已为空
假如须要同时烧毁cookie中的session_id,一般在用户退出的时刻可能会用到,则还须要显式的挪用setcookie要领删除session_id的cookie值。
运用session来存储用户的登录信息
session能够用来存储多种范例的数据,因而具有许多的用处,经常使用来存储用户的登录信息,购物车数据,或许一些暂时运用的暂存数据等。
用户在登录胜利今后,一般能够将用户的信息存储在session中,平常的会零丁的将一些主要的字段零丁存储,然后一切的用户信息自力存储。
$_SESSION['uid'] = $userinfo['uid']; $_SESSION['userinfo'] = $userinfo;
平常来讲,登录信息既能够存储在sessioin中,也能够存储在cookie中,他们之间的差异在于session能够轻易的存取多种数据范例,而cookie只支撑字符串范例,同时关于一些平安性比较高的数据,cookie须要举行花样化与加密存储,而session存储在服务端则平安性较高。
以上就是php会话手艺主要包括哪些的细致内容,更多请关注ki4网别的相干文章!