我使用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/orders和dashboard/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
<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应用程序,则不会发生这种情况。
发布于 2017-08-04 03:47:05
在这里回答我自己的问题。
我很容易在同一个apache服务器上实现了多个应用程序,方法是更改两个应用程序的信任。不需要虚拟环境或修改wsgi脚本!
Lodge应用程序:
app = Flask(__name__)
app.config.from_object(__name__)
app.config.update(
SESSION_COOKIE_NAME = 'session_lodge',
SESSION_COOKIE_PATH = '/lodge/'
)仪表板应用程序:
app = Flask(__name__)
app.config.from_object(__name__)
app.config.update(
SESSION_COOKIE_NAME = 'session_db',
SESSION_COOKIE_PATH = '/dashboard/'
)“m-dennis”和“burhan-khalid”的回答对这个问题有一些洞察力,所以谢谢你!
拥有多个子域对我来说不是一种选择,当两个应用程序都在自己的虚拟环境中运行时,我遇到了同样的问题。
发布于 2017-08-03 06:14:57
请注意,如果我访问http://example.com/dashboard上的仪表板应用程序和http://www.example.com/lodge上的lodge应用程序,则不会发生这种情况。
这实际上就是你看到这种行为的原因。Cookie被绑定到域,而不是路径。
一旦您在example.com上设置了cookie,它对于该域的所有链接、路径和URL都是有效的。不适用于www.example.com --这解释了为什么您在不同的子域上运行应用程序时,它是有效的。
所以你所看到的是正确的行为。
发布于 2017-08-03 06:11:05
尝试使用虚拟环境。似乎您的烧瓶应用程序运行在一个python执行线程中。您可以找到这里,如何在虚拟环境中运行应用程序。
https://stackoverflow.com/questions/45475993
复制相似问题