Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设计会话不会在不同的URL上持续_Ruby On Rails_Ruby_Session_Devise_Localhost - Fatal编程技术网

Ruby on rails 设计会话不会在不同的URL上持续

Ruby on rails 设计会话不会在不同的URL上持续,ruby-on-rails,ruby,session,devise,localhost,Ruby On Rails,Ruby,Session,Devise,Localhost,我有一个rails应用程序,我正在使用Desive进行身份验证。 当我在URL上成功登录时, 我尝试在同一浏览器中访问。 我希望在访问它时立即登录,但应用程序仍保持注销状态。当我试图在同一个浏览器中访问两个URL时,我真的无法理解发生了什么 更新: my config/initializers/session_store.rb Rails.application.config.session_store :cache_store, key: '_app' 您登录的事实存储在会话中,该会话存储在

我有一个rails应用程序,我正在使用Desive进行身份验证。 当我在URL上成功登录时, 我尝试在同一浏览器中访问。 我希望在访问它时立即登录,但应用程序仍保持注销状态。当我试图在同一个浏览器中访问两个URL时,我真的无法理解发生了什么

更新:

my config/initializers/session_store.rb

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

您登录的事实存储在
会话
中,该会话存储在
cookie
中。出于安全原因,浏览器仅向设置cookie的URL发送cookie

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

更新:

使用
cache\u store
存储会话不会改变任何内容,因为缓存存储中的会话属于用户的信息仍然存储在cookie中

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


并且cookie被绑定到一个域。这是浏览器的一项安全功能。如果不是这样,所有会话都会发送到所有域:谷歌会知道你是否登录了Facebook,每个网站都会知道你的银行有一个cookie

您登录的事实存储在
会话中,该会话存储在
cookie中。出于安全原因,浏览器仅向设置cookie的URL发送cookie

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

更新:

使用
cache\u store
存储会话不会改变任何内容,因为缓存存储中的会话属于用户的信息仍然存储在cookie中

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

并且cookie被绑定到一个域。这是浏览器的一项安全功能。如果不是这样,所有会话都会发送到所有域:谷歌会知道你是否登录了Facebook,每个网站都会知道你的银行有一个cookie