设置全局值会影响其他用户 - GAE Python

时间:2014-11-29 07:04:01

标签: python google-app-engine

我正在考虑根据本文松散地在python中设置全局值(下面的示例): Using global variables in a function other than the one that created them

#get a variable; set global variable
class Home(webapp2.RequestHandler):
  def get(self):
    #use OAuth2 to get a variable (example UserId = 1234567890)
    #set the UserId here
    global userId

#use global variable
class Submit(webapp2.RequestHandler):
  def post(self):
    #Do something with userId 1234567890

问题/不确定会发生什么(数字表示按时间顺序排列):

  1. UserId 1234567890转到class Home
  2. UserId 5555555555(不同的计算机)转到class Home
  3. UserId 1234567890提交class Submit内容(例如尝试存储到数据库:UserId = 1234567890; Comment = hi)
  4. ???。它会存储为UserId = 1234567890; Comment = hi OR AS UserId = 5555555555;注释= HI)

2 个答案:

答案 0 :(得分:2)

在网络应用中设置全局变量的唯一安全性是:a)在初始化期间设置不可变对象(或对象图形)时,以及b)当您正在工作时在单用户应用程序上,但如果您有多个选项卡打开到应用程序,则可能会出现问题。

当您需要在请求之间保存状态,并且该状态将通过POST返回给您时,您可以将状态外部化为隐藏表单字段,但更安全的选择是使用会话。对于webapp2,webapp2 sessions似乎很受欢迎。

答案 1 :(得分:1)

我刚刚测试了代码,结果是UserId = 5555555555;注释=喜。我想这就是为什么他们说全局变量是危险的:(