设计会话不会在不同的URL上保留

时间:2017-11-01 08:40:15

标签: ruby-on-rails ruby session devise localhost

我有一个rails应用程序,我正在使用设计进行身份验证。 当我成功登录网址http://localhost:5000/时, 我尝试在同一浏览器中访问http://127.0.0.1:5000/。 我希望在http://127.0.0.1:5000/上访问它后立即登录,但应用程序仍然会被注销。发生了什么我真的无法理解,因为我试图在同一个浏览器中访问这两个URL?

更新:

我的config / initializers / session_store.rb

Rails.application.config.session_store :cache_store, key: '_app'

1 个答案:

答案 0 :(得分:4)

您已登录的事实存储在session中,该cookie存储在localhost中。出于安全原因,浏览器仅将cookie发送到设置cookie的URL。

从浏览器的角度来看,127.0.0.1localhost是完全不同的网址。因此,127.0.0.1上存储在cookie中的登录信息不会发送到127.0.0.1运行的服务器,因此localhost运行的服务器没有关于cache_store上现有会话的信息}。

更新:

使用img=cv2.imread('whatever.jpg') gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) edges=cv2.Canny(gray,50,150,apertureSize=3) lines=cv2.HoughLines(gray,1,np.pi/180,200) for rho,theta in lines[0]: a=np.cos(theta) b=np.sin(theta) x0=a*rho y0=b*rho x1=int(x0+1000*(-b)) y1=int(y0+1000*(a)) x2=int(x0-1000*(-b)) y2=int(y0-1000*(a)) cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2) cv2.imwrite('somthing.jpg',img) 存储会话不会改变任何内容,因为缓存存储中的会话属于用户的信息仍存储在cookie中。

您的服务器需要在某处存储所有生成的会话的映像。如果用户回来,服务器需要知道哪个会话属于用户。此问题的简化解决方案可能是为每个会话分配一个随机数,并为用户提供此编号(存储在cookie中)。当用户返回时,也会返回cookie,并允许服务器按该号码加载会话。

并且cookie绑定到域。这是浏览器的安全功能。如果它没有那样工作,那么所有会话都会被发送到所有域:Google会知道你是否登录到Facebook,每个网站都知道你的银行有一个cookie ......