Cookie和Session的区别是什么

Cookie和Session的区别是什么,第1张

session是存储在服务器端的,cookie是存储在客户端的,所以session的安全性要高于cookie。

再者,我们获取的session里的信息是通过存放在会话cookie里的sessionId获取的。

因为session是存放在服务器里的,所以session里的东西不断增加会增加服务器的负担,我们会把一些重要的东西放在session里,不太重要的放在客户端cookie里。

cookie分为两大类,一个是会话cookie和持久化cookie,他们的生命周期和浏览器是一致的,浏览器关了会话cooki也就消失了,而持久化会存储在客户端硬盘中。

项目需求需要前后端分离,做一个登录验证码,但尴尬的是node中,因为跨域不能携带sessionId的原因,导致session丢失,node不能获取验证码,没法做验证

经过将近半个小时的折腾最终解决,特此保留

我的后端使用的是node的express框架,在appjs中进行如下设置

```

appall('', function (req, res, next) {

  resheader('Access-Control-Allow-Origin', '>

调用支付宝接口:alipaytradepagepay,该接口请求参数中有两个返回地址需要设置,return_url是同步返回地址,用于支付成功后页面的跳转,notify_url是异步通知地址,用于支付宝服务器主动通知商户服务器里指定的页面。问题出在同步返回的时候,因为业务需要返回的地址需要用户的登陆信息,项目中的用的session会话管理,但是调用支付宝支付接口支付成功后返回该同步页面时,却被拦截器拦截,跳到登陆页面,需要输入用户的登陆信息,这种情况是不能忍的。。。⊙o⊙

问题分析:

1考虑到这种情况,首先想到的就是session失效,可是session为什么会失效呢?

首先,session是服务器端为了保存状态而创建的一个特殊的对象。浏览器访问服务器时,服务器创建一个特殊对象session(该对象有一个唯一的id,称为sessionId,服务器会将sessionId以cookie形式发给浏览器,当浏览器再次访问服务器时,会将sessionId发送过来,服务器端可以利用这个sessionId找到相应的session对象)。

到此处判断是支付宝同步返回return_url的时候没有将sessionId发给浏览器,那我就把sessionId发给服务器,采用的解决办法是url重写,将sessionId拼接到return_url后面,格式为?SESSION=sessionId,尝试结果失败>"<||||

为什么会失败呢,代表用这种方式服务器依然无法获得sessionId,服务器如何获取sessionId的呢?后台用的服务器是Tomcat,它在处理>

session多端登录,就是保持session的一致性。由于session是唯一的,所以要保持session的唯一性,可以将session存放在一个地方,到时候大家取的时候,统一从一个地方取session,这样就保持了session的一致。

实现session的方法

其实就是将session存放在一个地方,大家存取就好了。至于其他都是附加的,原理就是酱紫。一般实现的方法有:

1)nfs文件共享系统,让不同项目访问同一个共享的文件。

2)存放在mysql。

3)存放在内存数据库,比如redis,memcache等。

4)基于cookie的共享。这个需要域名统一。

3关于redis的session共享,其他类似

1)phpini里面存放得有session的存放地址,可以将session的地址改成redis存放session的地址。sessionsave_path

但是一般这种服务器端会有访问控制。所以可以参考第二种方法

2)重写session,通过php代码更改session的存放路径什么的。php有相关的session重写的类。

其实这个真正的学名叫 sso[单点登录]

我画个原理图给你看吧,你应该容易理解

代码其实没什么,也不是关键,关键是你的思路,人家写的代码也很难嵌入到你的系统中去。。

实现的方法很多,看你怎么想。。。。

利用修改cookie的方式解决:

1):在服务器被访问的时候,将本次会话的sessionId传回到响应页面上。并且设置响应cookie的时间为本次session存在时间。代码:

Cookie cookie = new Cookie(“cookie的名称,不同服务器名称不一样”,“这个地方放的是sessionId”);

cookiesetPath("/");

cookiesetMaxAge(“这个地方写cookie保存session的时间,一般为session存活的时间”);

responseaddCookie(cookie);

2):重新打开浏览器输入之前地址试验。明白了吗?

以上就是关于Cookie和Session的区别是什么全部的内容,包括:Cookie和Session的区别是什么、跨域时session丢失问题的解决、支付宝寄件显示session等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9440889.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存