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值
echo session_id();


4. 添加SESSION数据
(1)$_SESSION['名称'] = 值
session的值可以是多类型的:

5. 读取SESSION数据
数组通过下标(session名称)获取值.
<?php
//开启session
session_start();
//获取session
echo $_SESSION['username'];
?>
6. 删除SESSION数据
(1)unset //销毁变量
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']; ?>
COOKIE与SESSION的详解的更多相关文章
- (进阶篇)Cookie与 Session使用详解
1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 ...
- Cookie与 Session使用详解
Cookie概念 在浏览某些 网站 时,这些网站会把 一些数据存在 客户端 , 用于使用网站 等跟踪用户,实现用户自定义 功能. 是否设置过期时间: 如果不设置 过期时间,则表示这个 Cookie生命 ...
- Cookie和Session机制详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- cookie和session的详解和区别
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- Cookie 和 Session 关系详解
什么是 Cookie 和 Session ? 什么是 Cookie HTTP Cookie(也叫 Web Cookie或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在 ...
- 【转】Cookie/Session机制详解
Cookie/Session机制详解 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息 ...
- cookie session token详解
cookie session token详解 转自:http://www.cnblogs.com/moyand/ 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, ...
- Chrome的cookie放在哪里了,Cookie/Session机制详解
Chrome的cookie放在哪里了,Cookie/Session机制详解:https://blog.csdn.net/u010002184/article/details/82082951
- Hibernate Session & Transaction详解
Hibernate Session & Transaction详解 HIbernate中的Session Session是JAVA应用程序和Hibernate进行交互时使用的主要接口,它也是持 ...
随机推荐
- NOIP2017普及组初赛总结
去年,我普及组复赛翻车,居然没进一等奖,于是,今年,我只能再做一次普及组. 这次初赛我93.5分,居然是中山市第一--(中山市太弱了?) 其实我觉得我没考好. 比赛时第二题(计算机存储数据的基本单位是 ...
- 廖雪峰Java10加密与安全-4加密算法-2口令加密算法
对称加密key是一个byte数组,如AES256算法的key是一个32字节的数组,普通的加密软件由用户输入加密口令.如果由用户输入口令,进行加密/解密,需要用到PBE算法. 1.PBE:Passwor ...
- CA证书制作
目录 手动制作CA证书 1.安装 CFSSL 2.初始化cfssl 3.创建用来生成 CA 文件的 JSON 配置文件 4.创建用来生成 CA 证书签名请求(CSR)的 JSON 配置文件 5.生成C ...
- Tomcat6 配置快逸报表
一.下载快逸报表程序,安装并创建报表 thunder://QUFodHRwOi8vZnRwY25jLXAyc3AucGNvbmxpbmUuY29tLmNuL3B1Yi9kb3dubG9hZC8yMDE ...
- 【One by one系列】一步步开始使用Redis吧(一)
One by one,一步步开始使用Redis吧(一) 最近有需求需要使用redis,之前也是随便用用,从来也没有归纳总结,今天想睡觉,但是又睡不着,外面阳光不错,气温回升了,2019年6月1日,成都 ...
- JasperReports报表组15
组在JasperReports的协助组织对报告的数据以逻辑方式.报告组代表连续记录的数据源中有一些共同点,比如某个报表字段的值的序列.报告组由<group>元素定义.一个报表可以有任意数量 ...
- java异常处理throw和throws的区别
throws和throw区别 throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理. 而throw则是指抛出的一个具体的异常 ...
- TZOJ 4267 An Easy Puz(深搜)
描述 Wddpdh find an interesting mini-game in the BBS of WHU, called “An easy PUZ”. It’s a 6 * 6 chess ...
- php工作中常用到的linux命令
压缩并指定目录举例:zip -r /home/kms/kms.zip /home/kms/server/kms 解压并指定目录举例:unzip /home/kms/kms.zip -d /home/k ...
- node.js install and cecium apply
ubuntu 18.04 install node.js https://blog.csdn.net/m0_43404744/article/details/94364508
