cookie与session详解

session与cookie是什么?

session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时候,我们怎么识别这个会员卡真实有效的呢?当我们将会员号给到收银员,收银员根据我们提供的会员号,输入到系统中,系统根据这个会员号去查询,如果查询到了就证明这个会员号是真实存在的.这里的会员号就好比cookie与session.会员系统就好比服务器端,收银员就好比客户端.

为什么会用到session与cookie呢?

根据上述的例子,我们知道session与cookie是可以干什么的了,那为什么必须用这个来实现呢?这里就有必要了解一下http应用传输协议的特点了。由于http协议是无状态的,即浏览器去请求了一个网页,这时候就是一个http请求,当服务端接收到请求之后,返回客户端需要的数据,在这过程中浏览器与服务器是建立了一个连接的。但是当服务端返回数据,客户端收到数据之后,他们的这种连接关系就断开了。下次浏览器再去发送请求的时候,又是重新建立一个连接,这两个链接没有任何关系。试想一下,当我们登录一个商场系统的时候,进入首页做了登录操作,但是我们下单或者加入购物车的时候,还需要登录,每访问一个页面就要登录,是不是很繁琐同时也是很不科学的,万一我们加入购物车的商品,我们点击下单了,下单页面要登录而且还无法正确的反馈出你下单时的那些商品.

Http特点

1.http协议支持客户端/服务端模式,也是一种请求/响应模式的协议。
2.无连接。所谓的无连接就是服务器收到了客户端的请求之后,响应完成并收到客户端的应答之后,即断开连接。限制每次的连接只处理一次请求。从而节省传输时间。
3.无状态。http协议对事务的处理没有记忆能力。也就意味着如果需要前面的信息,只能重传,这无形之中增加数据的传输量。这种方式某种方面上讲解放了服务器,但是却不利于客户端与服务器的连接。为了弥补这种不足,产生了两项记录http状态的技术,一个叫做Cookie,一个叫做Session,后面我们再细讲它们。
4.简单快捷:所谓的简单快捷是指客户端向服务器请求服务时,一般来说只需要传输请求方法和路径,就能进行访问
5.灵活:这里主要指的是客户端可以通过http协议传输任意类型的数据。比如传输.jpg文件、.ppt文件等等,只需要设定content-type就可以进行传输。

Cookie

cookie的基本概念

cookie是远程浏览器存储数据以此追踪用户和识别用户的的机制,从实现来说,cookie是存储在客户端上的一个数据片段。

cookie的运行原理与存储机制

.运行原理
1.客户端向服务端发起一个http请求.
2.服务端设置一个创建cookie的指令,响应给客户端.
3.客户端收到服务端响应的指令,根据指令在客户端创建一个cookie.
4.挡下一次请求时,客户端携带这个cookie向服务端发送请求.
.存储机制
总的来说,cookie在客户端存储的形式有三种,不同的浏览器的存储机制不同,存的cookie也不同.
1.文件存储.浏览器会针对不同的域,在磁盘的对应目录创建一个单独的文件,来存储该域下面的cookie值.
2.内存存储.当浏览器关闭时,该cookie随之消失.根据下面的创建语法,当我们未设置过期时间时则会出现这种情况.
3.flash存储.这种存储方式是永久存储在磁盘中,即使通过浏览器删除一些数据都是无法删除该方式存储的cookie,如果需要删除,可能通过磁盘的方式.

cookie的设置
Bool setcookie(string $name[, string $values, $expire=0[,string $path[,string $domain[, bool $secure = false[, bool $httpOnly = false]]]]] );
$name:cookie存储的名称,必填选项.
$values:cookie存储的值。这里需要注意的是,当把该值设置为false时,客户端会尝试删除这个cookie值,因此在要将值这是为true或者false的时候,我们用另外的值来代替,例如true用1代替,false用0来代替.
$expire:cookie的过期时间,秒为单位,当该值被设置时,定时删除;当该值没有设置时,该值是永久有效的.该值设置为小于当前时间时,会出发浏览器的删除机制,会自动删除cookie.
$path:cookie有效的目录,默认的目录是"/",即表示当前的正个域名都生效.
$domain:cookie的作用域名,默认的是当前域名有效,如果需要设置直接填写生效的域名即可.需要注意的是IE浏览器有长度限制,当只有大于5的时候才会生效.
$secure:cookie的加密处理,当设置为true的时候,需要使用HTTPS协议,才会生效.
$httpOnly:决定cookie是否只使用http协议,当设置为1或者true,其他非http协议是无法操作cookie的。例如我们未设置的时候,我们JavaScript是可以对cookie进行设置的.这样一定程度上保证了安全性.这种情况需考虑浏览器是否支持该配置项.

. 设置cookie的函数还有setrawcookie()函数,只不过该函数不会对值 进行urlencode序列号.
.<font color="red">有时候,我们可能遇到这种情况,我们在这个页面设置了cookie,但是去刷新页面获取cookie,按理说是会获取到cookie的,但实际情况是无法获取到,这是由于cookie运行机制导致,PHP创建了cookie这个指令,告诉浏览器,你需要执行这个指令了,这时候浏览器才会去执行这个指令,因此是无法获取到cookie的.</font>
. 在设置cookie之前,不能有任何输出.

// 实现方式一
setcookie($cookie,"hello,world!", 3600);
// 实现方式二
header("header("Set-Cookie: testcookie=中文; path=/; domain=.sunphp.org; expires=".gmstrftime("%A, %d-%b-%Y %H:%M:%S GMT",time()+9600));");
// 两则的作用是一样的,setcookie是PHP内置函数,是对http协议的操作封装。
cookie的获取
$_COOKIE['$cookeName'];
cookie的应用

. 用户身份识别
. 数据传输
. 登录控制(是否登录、单点登录)

cookie跨域设置

我们都知道,在前端开发中时常会遇到ajax跨域问题,我们解决的方式有很多种,可以参考这篇文章传送门1,传送门2,cookie跨域我们可以参考p3p传输协议传送门

cookie使用的注意事项

.数量限制,客户端对每一个domian下的cookie是有数量限制的,不是创建任意数量就行.
.安全性,根据上面的创建语法,我们可以得知,当我们未设置$httpOnly值得时候,非http协议是可以操作cookie的值的,例如JavaScript通过cookie($cookieName).而且一些抓包工具也是可以抓取到cookie的,还有就是cookie存储在客户端的文件中,如果获取到这个cookie,也是可以对cookie做一些操作的.为了防止别人可以拷贝cookie文件,进行恶意操作,可以对cookie进行加密处理.
数据传输:当cookie数量很多,数据很大的时候,其实对于带宽是有消耗的.比较http传输都需要带宽,当http传输的数据量大了,带了的带宽消耗就大.

Session

运行原理与存储机制

. 运行原理
1.客户端向服务端发起请求,建立通信
2.服务端根据设置的session创建指令,在服务端创建一个编号为sessionid的文件,里面的值就是session具体的值(组成部分 变量名 | 类型 :长度:值).
3.服务端将创建好的sessionid编号响应给客户端,客户则将该编号存在cookie中(一般我们在浏览器存储的调试栏中会发现cookie中有一个PHPSESSID的键,这就是sessionid,当然这个名称,我可以通过设置服务端是可以改变的).
.当下一次请求时,客户端将这个sessionid携带在请求中,发送给服务端,服务端根据这个sessionid来做一些业务判断.

.存储机制
1.存储方式.session默认是文件存储的.我们可以通过php.ini的配置来设置存储驱动传送门
2.生命周期.当我们未设置session的生命周期时,当浏览器关闭之后存储在客户端的phpsessid自动消失,因为它是存在内存,下次建立连接的时候会重新创建一个phpsessid.之前的session,PHP会自动的根据垃圾回收机制自动删除.这里我们可以根据session_set_cookie_params($expire)函数来设置一个生命周期;

session的设置
session_start();
$_SESSION = $values;

. session_start()设置之前,不能有任何输出

session的获取
$_SESSION['values'];
session的使用场景

. 用户身份识别
. 数据传输
. 登录控制(是否登录、单点登录)

session的注意事项

.安全性,sessionid是按照一定的算法生成,要保证session的值唯一性和随机性.
.客户端禁用cookie,根据上面session的运行原理可以得出,session的存储于传送还是依赖于客户端,因此当客户端禁用cookie时,客户端是无法保存PHPSESSID的,这时候可以通过url重写或者表单来实现session的传输.
.存储优化,按照上面的session创建,所有的session都会创建在一个目录下面,同时有的无效session在垃圾回收机制时间内还不会删除,当一台服务器配置的站点较多时,这时候会生成很多的session文件,导致我们读取速度变慢,我们可以设置session的存储目录级别,save_path函数.一般大型的项目(如分布式的项目),可以使用其他的存储方式,如数据存储,内存存储.

session与cookie的区别

. session存储在服务端,cookie存储在客户端.
.cookie的创建指令由服务端设置.
.session的sessionid需要客户端存储.

cookie与session的几个误区

.客户端禁止cookie,session无法使用?

使用url重写或者表单提交可以实现.

.session和cookie的安全性比较,session存在客户端安全更高?

由于cookie是存在客户端的,相对来说安全性是要低一些,不过在创建的时候可以设置$httpOnly值.
由于cookie与session是相互关联的,获取到cookie一定程度上获取到了session,同样可以操作session.

.cookie与session是不是在浏览器关闭的时候会消失?

这需要查看存储机制了。cookie可以存文件,内存,flash.存内存当然浏览器关闭则消失了;session由于垃圾回收机制,当在垃圾回收机制内是不会删除的,除非你代码中显示的做了删除操作.

.cookie是存储在客户端中,如何增加其安全性?

我们可以在设置cookie的时候,增加一些特殊参数,如客户端信息ip、浏览器信息等.

.当cookie存在客户端的文件中,是不是每个浏览器获取到这个文件都可以进行操作?

要看浏览器之间对cookie的管理机制是不是一样.

原文转自

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/276678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++万能头文件_初学Python,与C对比

✎背景学了一学年的C的基础&#xff0c;下学年开课Python&#xff0c;现在正在自学中...C也不是不学了&#xff0c;而是之前买了一本《CPrimer》在学校里&#xff0c;就准备先学一下Python&#xff0c;下学期利用自由时间接着学习C。这里分析了一下二者的优缺点&#xff0c;供大…

本地无法启动MySQL服务,报的错误:1067,进程意外终止---解决

原文链接&#xff1a;http://blog.csdn.net/shenhonglei1234/article/details/5928873 在本地计算机无法启动MYSQL服务错误1067进程意外终止 这种情况一般是my.ini文件配置出错了 首先找到这个文件&#xff1a; 默认安装路径 C:/Program Files/MySQL/MySQL Server 5.1/my.ini …

团队升级

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/yulongblog/blog/2988702

Css3: gradient背景渐变

Css3: gradient背景渐变 原文链接&#xff1a;http://kk073000.blog.163.com/blog/static/34826942012123111322691/ css3实现了背景渐变。 <gradient> [ <linear-gradient> | <radial-gradient> | <repeating-linear-gradient> | <repeating-r…

聚类 python_python中实现k-means聚类算法详解

算法优缺点&#xff1a; 优点&#xff1a;容易实现 缺点&#xff1a;可能收敛到局部最小值&#xff0c;在大规模数据集上收敛较慢 使用数据类型&#xff1a;数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他们的相近关系的&#xff0c;相近的就会放…

python笔试常见题

1、冒泡排序&#xff1a; 冒泡排序算是最基本的python算法了。也算python面试遇到问的最多的了。 如果是封装成函数。代码如下&#xff1a; 如果初始就一个字典。那么代码为&#xff1a; 冒泡排序的本质就是两两比较。根据结果调换位置。最终达到一个排序的效果。 注&#xff1…

centos 关闭防火墙_CentOS7操作系统下如何关闭防火墙

centos系统如果不关闭防火墙在使用中会遇到不少问题&#xff0c;而且centos7和centos6关闭防火墙的方式不一样。centos6:1.永久性生效&#xff0c;重启后不会复原开启&#xff1a; chkconfig iptables on关闭&#xff1a; chkconfig iptables off2.即时生效&#xff0c;重启后复…

Apache的认证、授权、访问控制

原文链接&#xff1a; http://man.chinaunix.net/newsoft/Apache2.2_chinese_manual/howto/auth.html Apache认证、授权、访问控制 认证(Authentication)是指任何识别用户身份的过程。授权(Authorization)是允许特定用户访问特定区域或信息的过程。 相关模块和指令 认证和授权…

dim private public static_PHP中const,static,public,private,protected的区别

const: 定义常量&#xff0c;一般定义后不可改变static: 静态&#xff0c;类名可以访问public: 表示全局&#xff0c;类内部外部子类都可以访问&#xff1b;private: 表示私有的&#xff0c;只有本类内部可以使用&#xff1b;protected: 表示受保护的&#xff0c;只有本类或子类…

C#图解教程 第六章 深入理解类

深入理解类 类成员 前两章阐述了9种类成员中的两种&#xff1a;字段和方法。本章将会介绍除事件(第14章)和运算符外的其他类成员&#xff0c;并讨论其特征。 成员修饰符的顺序 字段和方法的声明可以包括许多如public、private这样的修饰符。本章还会讨论许多其他修饰符。多个修…

Apache用户身份验证

原文链接&#xff1a;http://www.yylog.org/?p4830 Apache用户身份验证 在apache应用过程中&#xff0c;管理员经常需要对apache下的目录做一些限制&#xff0c;不希望所有用户都能访问该目录下的文件&#xff0c;只对指定用户访问&#xff0c;此时我们就要用到apache用户身…

c# 获取word表格中的内容_Java 获取、删除Word文本框中的表格

本文介绍如何来获取Word文本框中包含的表格&#xff0c;以及删除表格。程序测试环境包括&#xff1a;IDEAJDK 1.8.0Spire.Doc.jar注&#xff1a;jar导入&#xff0c;可通过创建Maven程序项目&#xff0c;并在pom.xml中配置Maven仓库路径&#xff0c;并指定Free Spire.Doc for J…

PS抠图方法[photoshop中文教程]

PS抠图方法 一、魔术棒法——最直观的方法   适用范围&#xff1a;图像和背景色色差明显&#xff0c;背景色单一&#xff0c;图像边界清晰。   方法意图&#xff1a;通过删除背景色来获取图像。   方法缺陷&#xff1a;对散乱的毛发没有用。   使用方法&#xff1a…

FastReport使用方法(C/S版)

前言 这两天群里一直有群友问一些关于FastReport的问题&#xff0c;结合他们的问题&#xff0c;在这里做一个整理&#xff0c;有不明白的可以加 FastReport 交流群 群 号&#xff1a;554714044 工具 VS2017 FastReport 开始 1.新建项目&#xff0c;添加三个按钮。预览、设计、…

如何设置Linux时区为东八区

当我们购买美国VPS或服务器的时候&#xff0c;默认情况下是美国时间。对于我们定时执行某些任务会带来麻烦&#xff0c;所以需要设置时区为东八区。登录SSH后&#xff0c;执行tzselect命令。我们这里选择亚洲5.这里选择china 9。一般选东八区&#xff08;北京&#xff0c;广东&…

Windows 10系统安装JDK1.8与配置环境

第一步&#xff1a;下载JDK1.8 地址:https://www.oracle.com/index.html 第二步&#xff1a; 安装分两次&#xff0c;第一次是安装 jdk &#xff0c;第二次是安装 jre 。安装jdk默认的安装地址为C盘&#xff0c;安装目录 \java 之前的目录修改成你想放的目录&#xff1b;安装jr…

git安装与配置_git 安装及基本配置

git 基本上来说是开发者必备工具了&#xff0c;在服务器里没有 git 实在不太能说得过去。何况&#xff0c;没有 git 的话&#xff0c;面向github编程 从何说起&#xff0c;如同一个程序员断了左膀右臂。你对流程熟悉后&#xff0c;只需要一分钟便可以操作完成原文地址: 服务器 …

Apache伪静态学习

原文链接&#xff1a;http://www.benben.cc/blog/?p305 Apache中有着这样一个模块&#xff0c;它默默无闻&#xff0c;却是URL操作的瑞士军刀&#xff01;有人这样评价它&#xff1a;“尽管它的例子和文档数量可以以吨来计算&#xff0c;但它仍然是巫术&#xff0c;该死的巫术…

不同的容器里实现 RadioButton的单选

请教一个各位牛人一个问题&#xff0c;如图&#xff1a; &#xff08;问题解决&#xff0c;见后面的解决方案~~&#xff09; 怎么在不同的winform容器(GroupBox)里实现 RadioButton &#xff08;如图中两个“详细照会”&#xff09;的单选&#xff0c;请各位牛人给出实现的思…

html调用接口_搜狗ocr识别接口

详细情况在代码中说明&#xff0c;如果不想自己使用TensorFlow&#xff0c;可使用下面接口这是要识别的图片&#xff1a;最终识别的结果&#xff1a;This is a lot of 12 point text to test theocr code and see if it works on all typesof file format.The quick brown dog …