使同一个server上不一样port的django应用可在同一个浏览器上打开

若是咱们有两个django应用site1和site2同时跑在同一个server的不一样端口,同时咱们在同一个浏览器的不一样tab登陆。那么这时就出出现这种状况,当咱们登陆site2时就会将site1上登陆的用户踢下来。django

为何会出现这种状况呢?这跟django的session框架有关,这里作一个简单介绍:当咱们第一次访问一个django网站时,django会生成一个session来保存当前会话的一些信息。同时会生成一个哈希值session_key并生成一个cookie发送给客户端,这个cookie的名字根据setting中SESSION_COOKIE_NAME设置,默认为“sessionid”(划重点)。这样下次请示session_key就会跟随cookie发送到server。server根据session_key查找对应session对象,获取当前会话的信息,固然也包括登陆信息。浏览器

因此上面的状况真相只有一个(柯南推眼镜脸):cookie

  1. 咱们登陆site1是获得一个叫sessionid的cookie,里面存储session_key1。
  2. 当咱们登陆site2时会更新那个叫sessionid的cookie,如今它的值为session_key2(浏览器存储cookies是基于ip而不是端口,因此会更新同一个名字的cookie)。
  3. 因此如今用新的session_key访问site1时就会拿不到原来的登陆信息,须要咱们从新登陆。

那么怎么解决呢,了解上面机制后,只须要在setting中设置SESSION_COOKIE_NAME便可。好比能够在site2中设置SESSION_COOKIE_NAME = ‘site2’,site1中用默认。固然也可同时设置site1和site2。session

 

这里是老瘦家的儿子,如需转载请声明,我替老瘦感谢你框架

相关文章
相关标签/搜索