前后端分离跨域问题cookie的使用

之前做了一个前后台分离的项目,发现session出现跨域的问题,这个时候在网上找了很多资料和帖子,多数帖子都是人云亦云,你一嘴,我一嘴的,但是看的多了之后也就明白了。

  • CORS全称Cross-Origin Resource
    Sharing,意为跨域资源共享。当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访问的那个资源就会遇到跨域问题。

  • 我们知道前后台分离,顾名思义就是前台一个服务器,后台一个服务器这样做有几个好处

  • 减轻动态服务器的压力,将静态内容分离出来,术业有专攻,让专业的服务器干专业的事

  • 摆脱了后台既当爹又当妈的现状,让后台专心的写后台的框架和业务层的开发,进行更精准的单元测试

  • 项目解耦,后台有bug启后台,前台有bug启前台

所以现状依然有些公司在使用前后台分离的技术,我使用的中间件是node.js,现在多数人已经不用它了,因为有一个更轻便和高效的中间件就是negix(有时间我会写一个negix的帖子)

使用前后台分离的好处显而易见,但是在实际开发时,我相信许多人跟我遇到过一个同样的问题session失效了,因为session的作用域是服务器,而不是全局,所以这个时候我们就不能用session来会话跟踪与控制了 可以使用cookie
首先我们要知道什么是Cookie?他的作用和用途?

  • Cookie是存储在用户计算机上的小文件,保存特定客户端和网站的适量数据,并可以由Web服务器或客户端浏览器访问,允许服务器提供针对特定用户定制的页面,或者页面本身可以包含一些知道cookie中的数据的脚本。
  • 作用:可以利用cookies跟踪统计用户访问该网站的习惯,比如什么时间访问,访问了哪些页面,在每个网页的停留时间等。利用这些信息,一方面是可以为用户提供个性化的服务,另一方面,也可以作为了解所有用户行为的工具,对于网站经营策略的改进有一定参考价值。
  • 用途: 存储用户在特定网站上的密码和 ID。另外,也用于存储起始页的首选项。在提供个人化查看的网站上,将利用计算机硬驱上的少量空间来储存这些首选项。这样,每次登录该网站时,浏览器将检查有无cookie。如果有,浏览器将此 cookie 随网页的请求一起发送给服务器。
  • Cookie的应用场景:假设你某次登录过一个网站,下次登录的时候不想再次输入账号了,怎么办?这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取Cookie里面的信息,就自动帮你把用户名和密码填了,能够方便用户。这也是Cookie名称的由来,给用户的一点甜头。

什么是session?

  • Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。
  • Session用于保存每个用户的专用信息. 每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右).Session中的信息保存在Web服务器内容中,保存的数据量可大可小.当 Session超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用Session对象保存还是一个不错的选择

session的工作原理

(1)当有Session启动时,服务器生成一个唯一值,称为Session ID(好像是通过取进程ID的方式取得的)。
(2)然后,服务器开辟一块内存,对应于该Session ID。
(3)服务器再将该Session ID写入浏览器的cookie。
(4)服务器内有一进程,监视所有Session的活动状况,如果有Session超时或是主动关闭,服务器就释放改内存块。
(5)当浏览器连入IIS时并请求的ASP内用到Session时,IIS就读浏览器Cookie中的Session ID。
(6)然后,服务检查该Session ID所对应的内存是否有效。
(7)如果有效,就读出内存中的值。
(8)如果无效,就建立新的Session。

cookie前台的代码

 //存入cookie name为用于会话跟踪 密钥用于登陆状态  
        document.cookie="name="+name; 
         //获取cookie
        var name=document.cookie.split(";")[0].split("=")[1];
        alert(name)

使用cookie就可以解决session失效的问题了,cookie里存用于会话跟踪的数据和密钥最后与后台进行比较 或者你觉的cookie不安全可以试着cookie和session一起用,传值的时候把cookie加密到后台进行后台解析然后同时存入session中,这样就完美的解决跨域问题了

最后如果大家有任何问题可以加一下我的Java开发交流群,我会为大家解决我能解决的问题!

群号:1031848061

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值