交互中的跨域——cookie,session

交互中的跨域——cookie,session

一、跨域
1.1为什么会出现跨域问题?
出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)。
1.2什么是跨域?
当一个请求URL的协议、端口、域名三者之间任意一个与当前页面的URL不同即为跨域。

二、Cookie
2.1 什么是cookie?
HTTP协议本身是没有状态的,即服务器无法判断用户身份。cookie实际上就是一小段的文本信息。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。
2.2 cookie机制
当用户初次访问并登录一个网站时,cookie的设置、发送会经历4个步骤:
(1)客户端发送一个请求到服务器
(2)服务器发送一个HTTPResponse响应到客户端,其中就包含Set—cookie的头部
(3)客户端保存cookie,再向服务器发送请求时,HTTPRequest请求中会包含一个cookie的头部
(4)服务器返回响应数据
2.3 cookie属性

属性属性介绍
NAME=VALUE键值对,可以设置要保存的 Key/Value,注意这里的 NAME 不能和其他属性项的名字一样
Expires过期时间,在设置的某个时间点后该 Cookie 就会失效
Domain生成该 Cookie 的域名,如 domain=“www.baidu.com”
Path该 Cookie 是在当前的哪个路径下生成的,如 path=/wp-admin/
Secure如果设置了这个属性,那么只会在 SSH 连接时才会回传该 Cookie
● Expires,该属性用于设置cookie的有效期,maxAge用来表示该属性,单位为秒,有三种值,分别为正数、负数和0.
● Cookie不可以跨域名,正常请况下,同一个一级域名下的两个二级域名也不能交互使用Cookie。
2.4 **设置document.domain解决无法读取非同源网页的Cookie问题**
	将两个网页都设置为相同的document.domain,两个网页就可以共享Cookie(此方案仅限于主域相同,子域不同的跨域中)。

三、Session问题
3.1 什么是session?
session即为会话,在谈论session时需要注意上下文环境。session一般是在web应用背景下,且有状态。
解决HTTP协议自身无状态的方式有cookie和session,两者都能记录状态,前者是将状态数据保存在客户端,后者是将数据保存在服务端。
3.2 session的基本原理和步骤
服务端为每一个session维护一份会话信息数据,而客户端和服务端依靠一个全局唯一的表示来访问会话信息数据。
创建session的步骤:
(1)生成全局唯一的标识符(sessionid)
(2)开辟数据存储空间。一般会在内存中创建响应的数据结构,但这种情况下,系统一旦停电,所有的会话数据就会丢失,如果是电子商务网站,这种事故会造成严重的后果。不过也可以写到文件里甚至存储在数据库中,这项虽然会增加I/O开销,但是session可以实现某种程度的持久化,而且更有利于session共享
(3)将session的全局唯一标识符发送个客户端。问题的关键就在服务端如何发送这个session的唯一标识符上。联系到HTTP协议,数据无非可以放到请求行、头域或Body里,基于此,一般来说会有两种常用的方式:利用cookie和URL重写。
3.3 session原理
浏览器请求服务器访问web时,程序为客户端的请求创建一个session的时候,服务器先检查这个客户端请求是否包含一个session标识,即SESSIONID。如果已经包含则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用。如果没有,则服务器为此客户端创建一个session并且生成一个与此session有关的sessionid,这个sessionid将在本次响应中返回到客户端经由cookie方式保存。这样在交互过程中,浏览器可以自动按照规则把这个标识发回给服务器,服务器根据这个找到session。

	**session的有效期:**
	为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。

本文章参考学习了《session-cookie-跨域》,如有抄袭冒犯,请见谅。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值