首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当一个应用程序上调用session.clear时,单个apache服务器上的多个Python应用程序丢失会话

当一个应用程序上调用session.clear时,单个apache服务器上的多个Python应用程序丢失会话
EN

Stack Overflow用户
提问于 2017-08-03 05:59:24
回答 3查看 2.4K关注 0票数 3

我使用WSGI在apache服务器上运行了几个python3.6Flask应用程序。

有两个不同的应用程序运行在同一个apache服务器上:

www.example.com/lodge

www.example.com/dashboard

这两个应用程序都有一个独特的app.secret_key

/dashboard应用程序是一个有自己的路线的烧瓶应用程序:

/dashboard/login

/dashboard/orders

/dashboard/staff

登录路由调用session.clear()并允许用户输入他们的登录信息。然后将登录令牌存储在会话变量中。

/dashboard/ordersdashboard/staff路由都有一个装饰器,用于检查会话中登录令牌的存在,并在不存在登录路由的情况下重定向到登录路由。

/lodge应用程序是另一个简单的酒瓶应用程序,有自己的路线:

/lodge/welcome

/lodge/personal

/lodge/review

/lodge/confirmation

欢迎路径还调用session.clear(),然后显示一个webform。当用户提交webform时,调用personal路由,将这些webform输入值存储到会话中。

我遇到的问题是,如果我导航到www.example.com/dashboard/login并登录,那么我就可以在人员和订单路径之间切换,根本没有问题,但是当我打开一个新的选项卡,转到www.example.com/lodge/welcome (然后调用session.clear),然后重新打开仪表板选项卡,尝试转到staff或orders路由时,当会话被清除后,我会被重定向回登录路由。

httpd.conf

代码语言:javascript
运行
复制
<VirtualHost *:80>
    WSGIScriptAlias /newapp "c:/lodge/lodge.wsgi"
    <Directory "c:/lodge">
        Require all granted
    </Directory>

    WSGIScriptAlias /dashboard "c:/dashboard/dashboard.wsgi"
    <Directory "c:/dashboard">
       Require all granted
    </Directory>
</VirtualHost>

请注意,如果我访问http://example.com/dashboard上的仪表板应用程序和http://www.example.com/lodge上的lodge应用程序,则不会发生这种情况。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-04 03:47:05

在这里回答我自己的问题。

我很容易在同一个apache服务器上实现了多个应用程序,方法是更改两个应用程序的信任。不需要虚拟环境或修改wsgi脚本!

Lodge应用程序:

代码语言:javascript
运行
复制
app = Flask(__name__)
app.config.from_object(__name__)

app.config.update(
    SESSION_COOKIE_NAME = 'session_lodge',
    SESSION_COOKIE_PATH = '/lodge/'
)

仪表板应用程序:

代码语言:javascript
运行
复制
app = Flask(__name__)
app.config.from_object(__name__)

app.config.update(
    SESSION_COOKIE_NAME = 'session_db',
    SESSION_COOKIE_PATH = '/dashboard/'
)

“m-dennis”和“burhan-khalid”的回答对这个问题有一些洞察力,所以谢谢你!

拥有多个子域对我来说不是一种选择,当两个应用程序都在自己的虚拟环境中运行时,我遇到了同样的问题。

票数 3
EN

Stack Overflow用户

发布于 2017-08-03 06:14:57

请注意,如果我访问http://example.com/dashboard上的仪表板应用程序和http://www.example.com/lodge上的lodge应用程序,则不会发生这种情况。

这实际上就是你看到这种行为的原因。Cookie被绑定到域,而不是路径。

一旦您在example.com上设置了cookie,它对于该域的所有链接、路径和URL都是有效的。不适用于www.example.com --这解释了为什么您在不同的子域上运行应用程序时,它是有效的。

所以你所看到的是正确的行为。

票数 3
EN

Stack Overflow用户

发布于 2017-08-03 06:11:05

尝试使用虚拟环境。似乎您的烧瓶应用程序运行在一个python执行线程中。您可以找到这里,如何在虚拟环境中运行应用程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45475993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档