COOKIE与SESSION的详解
cookie与session的小例子:
包含cookie记住登录名,session防止用户非法登录2个例子:
问我拿吧,这个下载连接挂了
描述
cookie过程描述
网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
用户第一次访问你的网站->在服务器端会将用户的信息设置为cookie(可以理解为制造饼干过程)->通过http协议发送给用户(浏览器),在用户端,cookie以文本的形式保存下来.
用户第二次访问同一个网站-> 在http协议的请求头中会携带着cookie信息 -> 服务器对cookie进行验证 ->第二次响应 -> 猜你喜欢
session过程描述 :
当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时session_id,以cookie的形式传递给客户端浏览器,浏览器将这个session_id保存在内存中。
浏览器再次请求都会额外加上这个session_id(也即是cookie的值),服务器根据这个session_id,在服务端来判断使用哪个session文件.
COOKIE与SESSION区别:
一. COOKIE
下面是cookie在浏览器和服务器中请求与响应的过程:
1. COOKIE的工作原理
cookie过程描述
网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
用户第一次访问你的网站->在服务器端会将用户的信息设置为cookie(可以理解为制造饼干过程)->通过http协议发送给用户(浏览器),在用户端,cookie以文本的形式保存下来.
用户第二次访问同一个网站-> 在http协议的请求头中会携带着cookie信息 -> 服务器对cookie进行验证 ->第二次响应 -> 猜你喜欢
set_cookie.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>设置COOKIE</h1> <?php //设置cookie //Setcookie(名称,值,过期时间,有效路径,有效域名) setcookie('name','admin94324239',time()+2222,'/','.abc.com'); ?> </body> </html>
get_cookie.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>获取COOKIE</h1> <?php echo $_COOKIE['name']; ?> </body> </html>
2. 设置COOKIE
创建语法:
setcookie(名称,值,过期时间,有效路径,有效域名)
说明:
1) 名称, 字符串, 为取出cookie的值服务.
2) 值, 注意值的类型.(必须为string类型)
3) 过期时间, time()+秒数
设置cookie的有效期为一周:
注意!
4) 有效路径, 指的是在哪个路径下可以将cookie的值取出
默认情况下,是当前页面所在的目录及其子目录有效的.
5) 有效域名, 指的是在哪个域名下可以将cookie的值取出
说明: 默认情况下是当前的主域名. 如www.abc.com
3. 读取COOKIE
直接通过超全局数组下标读取
echo $_COOKIE[‘cookie的名称’]
4. 删除COOKIE的方法
1) 将cookie的有效时间过期即可.
setcookie(名,值,time()-1) setcookie(名,值,time()-9999999); setcookie(名)
5. 实例:自动记录登录的用户名
前台页面:
后台处理页面:
二.SESSION
1. SESSION的工作原理
下面是在浏览器详细的工作过程:
session过程描述 :
当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时session_id,以cookie的形式传递给客户端浏览器,浏览器将这个session_id保存在内存中。
浏览器再次请求都会额外加上这个session_id(也即是cookie的值),服务器根据这个session_id,在服务端来判断使用哪个session文件.
从下面可以看出session与cookie息息相关:
设置session:
获取session:
以上代码:
set_session.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>设置session</h1> <?php //开启session session_start(); //创建session $_SESSION['username'] = 'itcast_china'; ?> </body> </html>
get_session.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>获取session</h1> <?php //开启session session_start(); //获取session echo $_SESSION['username']; ?> </body> </html>
2. 开启SESSION会话功能
(1)在创建session之前必须先开启会话
(2)方法: session_start();
(3)位置: 原则开启之前只要不超过4KB都可以开启. 建议,在当前页面的最前面开启.
(4)在一个页面中,只能开启一次.
(5)Session_start(); //在开启时会判断,当前会话是否已经开启,如果已经开启则不会再生成一个id号.
(6)不管是创建session,还是使用(判断,删除等)session都必须先开启.
3. 获取当前的SESSION的ID值
1 echo session_id();
4. 添加SESSION数据
(1)$_SESSION['名称'] = 值
session的值可以是多类型的:
5. 读取SESSION数据
数组通过下标(session名称)获取值.
1 <?php 2 //开启session 3 session_start(); 4 //获取session 5 echo $_SESSION['username']; 6 ?>
6. 删除SESSION数据
(1)unset //销毁变量
1 unset($_SESSION[名])
(2)session_destroy(); //删除当前的session文件
彻底删除session, 两个函数接合使用.
7. 实例:防止用户非法登录
看小例子
8.问题:
如果用户将浏览器的cookie禁用,问session还能使用吗?为什么?如何解决?
答:不能使用. 因为session是基于cookie的.
解决方法:
自己来传session_id即SID:
test.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>禁止cookie怎么办?</h1> <?php session_start(); $_SESSION['username'] = 'abc'; ?> <a href="test.php?<?php echo SID; ?>">自己来传!</a> </body> </html>
index.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <h1>获取SID并设置为当前的session_id</h1> <?php //从地址栏中得到session_id,并设置为当前的session_id; if(isset($_GET['PHPSESSID'])){ //设置为当前的session_id session_id($_GET['PHPSESSID']); } session_start(); echo $_SESSION['username']; ?> </body> </html>
9. SESSION的垃圾回收:
什么是SESSION的垃圾回收?
SESSION垃圾回收时间(session.gc_maxlifetime),
回收的概率(session.gc_probability, session.gc_divisor)
在php.ini中:
三.SESSION相关配置
session.name = PHPSESSID session.auto_start =0 // 0 表示不开启. session.cookie_lifetime=0 //代表浏览器关闭,会话结束 session.cookie_path=/ //指定了要session会话 cookie 的有效路径 session.cookie_domain //指定了要session会话 cookie 的有效域名 脚本设置: (a)ini_set('session.cookie_path', '/'); (b)ini_set('session.cookie_domain', '.mydomain.com'); (c)ini_set('session.cookie_lifetime','1800');"
例子:设置10内有效的session
//set_session.php 设置10秒内有效的session <?php session_start(); ini_set('session.cookie_lifetiem','10'); session_start(); $_SESSION['username'] = 'abc'; ?> //get_session 获取10秒内有效的session <?php session_start(); echo $_SESSION['username']; ?>