为什么对于某些浏览器我的Session对象的值是错误的?

时间:2011-05-07 12:47:57

标签: c# asp.net

我正在为基于mojoportal的iphone优化网站编写一个亚洲语言学习模块(正在进行中,英语资源未完全翻译:http://ilearn.dandandin.it/kanatrainer.aspx

这是一个简单的“猜测如何阅读”游戏,正确的答案存储在Session对象中。

我不明白为什么,但是,特别是使用Safari,用户将获得其他人的会话值

这是代码的摘录(我删除了一些内容,翻译了变量)

    protected void Page_Load(object sender, EventArgs e)

    {

    if (!Page.IsPostBack)
        {
        ...
        generateRandom();
        }
    }

    protected void generateRandom()
    {
        int i, j = 0, livello = 5, chance = 0;
        System.Random acaso = new Random();
        ...
        while (j <= 0)
        {
            j = acaso.Next((Convert.ToInt32(TextBoxlunghezza.Text) + 1));
        }
        ...
        for (int k = 0; k < j; k++)
        {
            i = acaso.Next(livello);
            Session["randomLetters"] += (globals.asianCharacters[i]);
            ...
        }
        ...
    }


    protected void AnswerButton_Click(object sender, EventArgs e)
    {
        string compare = Server.HtmlEncode(InputTextBox.Text.ToLower());
        if (compare == "")
        {
            Label1.Text = ("You did not write anything");
            return;
        }
        if (Session["randomLetters"].ToString() != compare)
        {
            Label1.Text = ("Wrong!" + Session["randomLetters"]);
        }
        else
        {
            Label1.Text = ("Right!" + Session["randomLetters"]);
        }
     ...
    }

在Visual Studio中,每个浏览器都会发生什么:

randomLetters是“你好”。用户在文本框中写入“hello”,并将“hello”与“hello”进行比较。标签上写着“对!你好”。

iis中发生的情况,仅在基于webkit的浏览器中发生:

randomLetters是“你好”。用户在文本框中写“hello”,但“hello”与“goodbye”进行比较。标签上写着“错误!再见”。

我不明白Session [“randomLetters”]的变化

公共与私人代码: the code

2 个答案:

答案 0 :(得分:0)

您如何存储会话状态?曲奇饼?数据库?所以...我有很多问题(通常使用IE 8)与浏览器缓存页面和cookie的方式有关。通常,更改浏览器中的相应设置可解决问题。我不知道这是否有帮助。为了使其更加健壮,我必须找到一种方法,在其中一个设置不正确时通知用户。

答案 1 :(得分:0)

使用HiddenFields我“解决”了这个问题(但我不喜欢这样)