cookie和session的区别

参考文章:

https://www.jianshu.com/p/c0a7bcba8987

https://www.cnblogs.com/okzzx/p/7006912.html


1.Cookie

Cookie是一种存储在远程客户端并以此来跟踪和识别用户的机制。

简单的说,cookie是web服务器暂时存储在用户硬盘上的一个文本文件,并随后被web浏览器读取。当用户再次访问web网站时,网站通过读取cookie文件记录这位访客的特定信息,从而迅速做出响应,如在页面中不需要输入用户的id和密码即可直接登录网站。

cookie是http头标的组成部分


不同的浏览器对Cookie的处理机制不一样

cookie限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。

1.   创建cookie

Setcookie(string name,string value,intexpire,string path,string domin,int secure)

参数描述

name必需。规定 cookie 的名称。

value必需。规定 cookie 的值。

expire可选。规定 cookie 的有效期。

path可选。规定 cookie 的服务器路径。

domain可选。规定 cookie 的域名。

secure可选。规定是否通过安全的 HTTPS 连接来传输 cookie。默认为0(如果为0,则cookie只能在HTTPS连接上有效;如果值为0,则cookie在http和https上连接均有效)

例:

setcookie('mr0','aa');

setcookie('mr1','bb');

var_dump(
$_COOKIE['mr0']);
var_dump(
$_COOKIE);

运行结果如图上所示

注意:通过setcookie()函数创建cookie后,在当前页面echo $_Cookie[‘name’]不会有任何输出,必须是在刷新后或者达到下一个页面才能看到cookie的值。因为setcookie()函数执行后,向客户端发送一个cookie,如果不刷新或者浏览下一个页面,客户端就不能将cookie返回。

 

2.   删除cookie

2.1.将cookie的第二个参数设置为空,第三个参数设置为小于当前系统时间即可

setcookie('mr1','',time()-1);

2.2在客户端手动删除cookie


session
session是指终端用户与交互系统进行通信的时间间隔,通常是指从注册进入系统到注销退出系统之间所经过的时间。其工作原理如图所示:






当登陆网站时,启动session会话,在服务器中生成唯一的session_id,这个session_id在本次登陆结束之前在页面中一直有效。当关闭页面或者注销登录时,这个session_id会在服务器中自动注销。当重新登录此页面,会再次生成一个随机且唯一的session_id.




使用session_start之前浏览器不能有任何输出,即便是一个html标记,一个echo语句都不行。

Session创建

代码

<?php
session_start();
$str = 'sfkjsl';
if(empty($_SESSION['name']))
{
    $_SESSION['name']='aa';
    echo "place login";
}else{
    echo $_SESSION['name'].'welcome';
}

运行结果

第一次:


刷新:


php.ini中的session命令

session.save_handler = files

session保存的方式(redis,memcache,mysql等其他方式)

session.save_path="D:\phpStudy\tmp\tmp"

session保存的路径

session.use_cookies = 1

是否使用cookies在客户端保存会话sessionid,默认为采用cookies

session.use_only_cookies = 1

是否仅仅使用cookie在客户端保存会话sessionid,这个选项可以使管理员禁止用户通过URL来传递id,默认为0,如果禁用的话,客户端如果禁用Cookie将使session无法工作。

session.name = PHPSESSID

当做cookie name来使用的session标识名

session.auto_start = 0

是否自动启动session,默认不启动,我们知道在使用session功能时,我们基本上在每个php脚本头部都会通过session_start()函数来启动session,如果你启动这个选项,则在每个脚本头部都会自动启动session,不需要每个脚本头部都以session_start()函数启动session,推荐关闭这个选项,采用默认值。

session.cookie_path = /

session.cookie_lifetime= 0

  传递sessionid的Cookie有效期(秒),0表示仅在浏览器打开期间有效。

  session.gc_probability= 1

  session.gc_divisor= 100

  定义在每次初始化会话时,启动垃圾回收程序的概率。计算公式如下:session.gc_probability/session.gc_divisor,比如1/100,表示有1%的概率启动启动垃圾回收程序,对会话页面访问越频繁,概率就应当越小。建议值为1/1000~5000。

  session.gc_maxlifetime= 1440

  设定保存的session文件生存期,超过此参数设定秒数后,保存的数据将被视为’垃圾’并由垃圾回收程序清理。判断标准是最后访问数据的时间(对于FAT文件系统是最后刷新数据的时间)。如果多个脚本共享同一个session.save_path目录但session.gc_maxlifetime不同,将以所有session.gc_maxlifetime指令中的最小值为准。

如果你在session.save_path选项中设定使用子目录来存储session数据文件,垃圾回收程序不会自动启动,你必须使用自己编写的shell脚本、cron项或者其他办法来执行垃圾搜集。

 

一般以www.baidu.com?session_id=”SID”的方式请求服务器

设置用户自定义会话存储函数session_set_save_handler ()

bool session_set_save_handler callable $open callable $close callable $read callable $write callable $destroy callable $gc [, callable$create_sid [, callable $validate_sid [, callable $update_timestamp ]]] )

cookie和session的区别

1.   cookie是存储在客户端的,用户可以看见,不安全,但是不浪费服务器资源session是存储在服务器上的,安全。

2.   Cookie中只能保存ASCII字符串,Session中可以保存任意类型的数据

Cookie和Session的区别:

  • Cookie中只能保存ASCII字符串,Session中可以保存任意类型的数据,甚至Java Bean乃至任何Java类、对象等
  • 隐私策略不同。Cookie存储在客户端,对客户端是可见的,可被客户端窥探、复制、修改。而Session存储在服务器上,不存在敏感信息泄露的风险
  • 有效期不同。Cookie的过期时间可以被设置很长。Session依赖于名为JSESSIONI的Cookie,其过期时间默认为-1,只要关闭了浏览器窗口,该Session就会过期,因此Session不能完成信息永久有效。如果Session的超时时间过长,服务器累计的Session就会越多,越容易导致内存溢出。
  • 服务器压力不同。每个用户都会产生一个session,如果并发访问的用户过多,就会产生非常多的session,耗费大量的内存。因此,诸如Google、Baidu这样的网站,不太可能运用Session来追踪客户会话。
  • 浏览器支持不同。Cookie运行在浏览器端,若浏览器不支持Cookie,需要运用Session和URL地址重写。
  • 跨域支持不同。Cookie支持跨域访问(设置domain属性实现跨子域),Session不支持跨域访问





猜你喜欢

转载自blog.csdn.net/kevlin_v/article/details/80085626