php COOKIE和SESSION的一些理解
web服务器是基于http协议的,而http协议是无状态的,导致任意两个请求之间没有联系。但是我们登录网站后,它却能记住我们的身份,这个过程中一定使用了某个标识来区别我们的身份。对于简单数据传输的我们可以使用URL上面的GET方式和HTTP的POST方式,对于大量的数据就显得比较麻烦了,因此我们用到了COOKIE和SESSION来跟踪不同的用户。
1.COOKIE技术 :
需要浏览器参与,保存在客户端。意思就是php服务端制造一个cookie数据交给浏览器保存,然后浏览器每次访问的时候都携带这个数据,服务器再根据这个数据做出不同的响应。setcookie('name','ming'); 这句话的意思是在浏览器上设置一个变量name,值为ming,只能为字符串;它保存在浏览器上面,我们可以预定义数组变量$_COOKIE['name'] 获得。当然,这里不仅仅是$_COOKIE['name'],我们还可以获得浏览器上的其他COOKIE值。
COOKIE数据默认是临时COOKIE,也就是关闭浏览器CKKOIE随之消失. 我们可以设置它的有效期,例如:
setcookie('name','ming',time()+60*60); 设置为1个小时
setcookie('name','ming',PHP_INT_MAX); 设置为php最大时间值
COOKIE的有效路径是当前目录和后代目录。 我们可以通过第四个参数来设置
setcookie('name','ming',time()+60*60,'/'); 整站有效
在子域名之间是可以共享的
setcookie('name','ming',time()+60*60,'/','demo.php'); 在www.demo.php下所有子域名都可以访问
不能设置了马上就访问到,要等到该程序执行了,下次才能生效。
2.SESSION技术
前面的COOKIE是基于客户端的,每次请求都携带,不太安全,SESSION则是存放在服务端,它给每个客户端开辟一个空间,存放唯一标识PHPSESSID,这样就可以通过PHPSESSID来区分不同的客户端了,当浏览器第一次访问时PHPSESSID,会自动生成一个PHPSESSID,保存在COOKIE数组中。
首先开启php的session支持,在这之前不能有输出。
session_start();
SESSION['name'] = 'ming'; 设置session变量
unset(SESSION['name') 删除该session变量
$_SESSION = array() 清空所有session
session_destroy() 只删除session文件 ,不清空session变量
为了完全删除session 还需要 setcookie('PHPSESSID','',time()-1);
session默认以文件保存在服务端,存放路径可以通过php.ini session.save_path 来设置, 当session文件过多时,也可以进行配置分子目录进行保存。
服务器端垃圾判定的时间要与session持久化的时间尽量一致
数据库保存session
利用系统函数,设置session存储所需要的处理器,为当前定义好的这六个函数:
session_set_save_handler(
'sess_open',
'sess_close',
'sess_read',
'sess_write',
'sess_destroy',
'sess_gc'
);
增加数据表
create table session(
sess_id varchar(32) primary key,
sess_data text,
expire int
)charset=utf8;
垃圾回收 gc
如果一条记录(一个文件) 在多久之内,没有被使用过了,则认为该数据是垃圾!
默认的时间,是1440s秒.24分钟。可以通过php.ini进行配置
什么时候执行删除的动?
在session_start()时,有一定的几率,执行垃圾回收!
默认是 1/1000.
可以通过php.ini修改
执行过程:
完整代码
<?php //定义六个函数 /**
* 在session开启时执行,
* 负责完成session存储所需要资源的初始化工作!
*/
function sess_open() {
echo 'open<br>';
//连接数据库
$link = mysql_connect('127.0.0.1:3306', 'root', '123456');
mysql_query('set names utf8');
mysql_query('use database');
}
/**
* session_start()时,开启session时被执行
*
* 负责从当前的session记录中,将session数据读取出来
*
* @param $sess_id string 当前的sessionID
*
* @return string session的数据,不需要序列化。如果没有读到则返回空字符串!
*/
function sess_read($sess_id) {
echo 'read<br>';
//利用 select 查询
$sql = "select sess_data from `session` where sess_id='$sess_id'";
$result = mysql_query($sql);
if($row = mysql_fetch_assoc($result)) {
return $row['sess_data'];
} else {
return '';
}
}
/**
* 在 脚本结束时被执行
*
* 负责,将当前的session数据,同步写到当前的session记录中
*
* @param $sess_id string
* @param $sess_data string
*
* @return bool
*/
function sess_write($sess_id, $sess_data) {
echo 'write<br>';
//执行写数据的操作!
//当前session记录存在则更新sess_data,不存在则插入!
$expire = time();
$sql = "insert into `session` values ('$sess_id', '$sess_data', $expire) on duplicate key update sess_data='$sess_data', expire=$expire";
return mysql_query($sql);
} /**
* 在调用了 session_destroy()系统函数时,被自动调用!\
* 负责的功能时,利用当前id,删除当前的session记录!
*
* @param $sess_id string
*
* @return bool
*/
function sess_destroy($sess_id) {
echo 'destroy<br>';
//执行 delete 操作
$sql = "delete from `session` where sess_id='$sess_id'";
return mysql_query($sql);
} /**
* 在session_start() 时执行
* 负责 删除所有的垃圾数据
*
* @param $maxlife int 最大的生命周期
*
* @return bool
*/
function sess_gc($ttl) {
echo 'gc<br>';
//
$now = time();
$last = $now-$ttl;//
$sql = "delete from `session` where expire < $last";
return mysql_query($sql); }
/**
* 脚本结束
*/
function sess_close() {
echo 'close<br>';
// mysql_close();
return true;
} session_set_save_handler(
'sess_open',
'sess_close',
'sess_read',
'sess_write',
'sess_destroy',
'sess_gc'
);
配置php存放在memcache中
<?php ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://Mem服务器1:端口号,tcp://Mem服务器2:端口号..."); ?>
php COOKIE和SESSION的一些理解的更多相关文章
- cookie和session的个人理解
这是我学习后的个人理解 欢迎提点 如果说的不是很正确请纠正 COOKIE: 1.服务端给浏览器客户端返回一个编号(COOKIE值) 2.这个值存在浏览器中,接下来浏览器再次访问我的时候,会把这个值带 ...
- 对Cookie和Session的深入理解
session对象 session对象用于存储特定的用户会话所需的信息 . Session对象的引入是为了弥补HTTP协议的不足.HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端 ...
- Cookie和session的简单理解和应用
一.COOKIE 1.http协议建立连接后,无法保持状态:但实际情况,网站和服务器要进行通讯,需要“保持状态”,因此cookie应运而生:浏览器登陆web服务器后, Web 服务器产生包含有关用户的 ...
- Cookie和Session得使用理解
Cookie 饼干 什么是Cokkie? 1.Cookie 翻译过来是饼干的意思. 2.Cookie 是服务器通知客户端保存键值对的一种技术. 3.客户端有了 Cookie 后,每次请求都发送给服务器 ...
- 形象地理解Cookie和Session
Cookie和Session的形象理解 通过实际生活中的银行卡来理解Cookie和Session间的关系: Cookie相当于银行卡 Session相当于银行账户 结合到银行存钱和取钱的过程来理解: ...
- Java Web(三) 会话机制,Cookie和Session详解
很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因可能是没能好好理解这两种会话机制,所以会一直遗忘,一直重新回过头来学习它,今天好好把他总 ...
- Java Web(三) 会话机制,Cookie和Session详解(转载)
https://www.cnblogs.com/whgk/p/6422391.html 很大一部分应该知道什么是会话机制,也能说的出几句,我也大概了解一点,但是学了之后几天不用,立马忘的一干二净,原因 ...
- Python + request接口测试中Cookie和Session的获取和使用
Cookie和Session的简单理解 由于Http协议是无状态的,所以产生了cookie和session进行状态的管理. 从哪里来,在哪里,到哪里去: --> Cookie是由服务端生成,存 ...
- web开发(三) 会话机制,Cookie和Session详解
在网上看见一篇不错的文章,写的详细. 以下内容引用那篇博文.转载于<http://www.cnblogs.com/whgk/p/6422391.html>,在此仅供学习参考之用. 一.会话 ...
随机推荐
- NOIP1999邮票面值设计[搜索|DP]
题目描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之间的每一个邮资值都能得到 ...
- oracle:sql函数
Oracle将函数大致分为单行函数,聚合函数和分析函数. 单行函数分为字符函数,日期函数,转换函数,数字函数,通用函数,decode函数 一.字符函数 1)大小写控制函数 01.Lower() 全部小 ...
- QuickFIX/N 动态存储配置信息
Acceptor或者Initiator能够为您维护尽可能多的FIX会话,因而FIX会话标识的唯一性非常重要.在QuickFIX/N中,一个FIX会话的唯一标识是由:BeginString(FIX版本号 ...
- python反弹tty shell
linux环境下进行内外渗透需要反弹shell连接内网ssh,Telnet等,就需要tty层的shell了.python代码转过来的,备用. #!/usr/bin/python import sys ...
- noip模拟赛(10.4) 字典序(dictionary)
[题目描述] 你需要构造一个1~n的排列,使得它满足m个条件,每个条件形如(ai,bi),表示ai必须在bi前面.在此基础上,你需要使它的字典序最小. [输入数据] 第一行两个正整数n,m.接下来m行 ...
- eclipse打不开,报错 "java was started with exit code=13"
刚才打开eclipse时,出现如上的报错窗口. 1.查看java 版本,发现是1.8版本,记得自己之前手动安装的java应该是1.7或者更低的版本.让我想起之前系统总是会提醒java有更新,最近就没有 ...
- SOAP-XML请求(iOS应用下集成携程api)
用携程机票为例: 携程联盟 飞机票.门票 联盟ID:278639 站点ID:739462 密钥KEY:BE57B925-E8CE-4AA2-AC8E-3EE4BBBB686F API_URL:open ...
- sublime text2安装package control的方法
Package Control 方法一:在线安装,首先打开 Ctrl + ~,输入如下的代码: import urllib2,os; pf='Package Control.sublime-packa ...
- js 增删改查方法
push() 向数组的末尾添加一个或多个元素 pop() 删除数组内部并返回数组的最后一个元素 shift() 把数组内部的第一个元素从其中删除,并返回第一个元素的值 unshift() 向数组外部的 ...
- FastReport 隐藏matrix的列如何实现
fastReport在处理 行列都是浮动的时候非常好用. 但是也有一些不太直观的东西.比如说要设置生成结果的某行某列. 修改字体颜色背景色,隐藏,设置行高,设置列宽等等. 可以在 matrix的aft ...