计算结果在服务器端但会话数据未按用户隔离

时间:2014-01-06 08:37:54

标签: python google-app-engine

在用户进行测试的Web应用程序上工作,他们会在测试结束时看到他们的分数。 我计算服务器端的用户分数。问题是,当用户参加测试时,它会影响另一个用户进行另一次测试的分数。我的意思是如果用户A进行测试,而用户B也从另一个系统进行测试,则在一天结束时,用户A将用户B的结果视为他的结果。真的不知道代码有什么问题。但下面是我计算用户分数的代码

def Compute_UserScore(self, details, ques_no):
    try:
        if(HomePage.answer_.strip() == ""):
            self.response.write("""<script type = "text/javascript">
            alert("Dear User, You can not answer same answer twice.. Take test Again !");
            </script>""")
            self.redirect('/otherPages/subjectSelect.html')
        else:
            count = 0
            HomePage.ans_no = 0
            HomePage.unans_no = 0
            HomePage.correct_no = 0
            HomePage.wrong_no = 0
            HomePage.failed_ques = list()
            HomePage.answer_ = HomePage.answer_.strip()
            question_1 = HomePage.question_.split(" gcdc_split_format ")
            while (count != (ques_no)):
                user_answer = str(details[count]).strip().capitalize()
                real_answer = str(HomePage.answer_[count]).strip().capitalize()
                if (len(str(user_answer).strip()) == 1):
                    HomePage.ans_no = HomePage.ans_no + 1
                    if(user_answer.strip() == real_answer.strip()):
                        HomePage.correct_no = HomePage.correct_no + 1
                    else:
                        HomePage.wrong_no = HomePage.wrong_no + 1
                        HomePage.failed_ques.append(str("No. " + str(int((count + 1))) + "  " + str(question_1[count])))
                else:
                    HomePage.unans_no = HomePage.unans_no + 1
                count = count + 1
            HomePage.answer_ = ""
    except:
        self.redirect('/')
    return " "

3 个答案:

答案 0 :(得分:3)

不确定您的 HomePage 是什么,但它似乎是全局变量或包名称。 任何一个都意味着您的Web应用程序的每个用户共享相同的内存存储(变量)以获得测试结果。

如果您想要保存所有用户,这不是正确的方法。检测结果。您应该有一种方法来识别不同的用户(即让用户登录),这样您就可以为不同的用户显示不同的结果,并将结果保存在数据库或python词典中。

另一种方法是将结果保存在cookie中,cookie数据保存在客户端,因此不同的用户会有所不同。

答案 1 :(得分:0)

属性值为HomePage共享,并且相互重写。相反,你应该创建一个类的实例。

答案 2 :(得分:0)

为防止人们看到其他人的答案,您需要一个识别系统。一个简单的用户名/密码组合就行了。然后,您可以创建一个简单的数据库表来存储它,以及它们的分数。您没有让我们看到主页,所以我无法告诉您如何实例化它,或者结构是什么样的,但是您需要一个ID系统。