none
使用验证码进行验证的时候遇到一个问题 RRS feed

  • 问题

  • 我使用一个页面作为验证码生成页面:
            protected void Page_Load(object sender, EventArgs e)
            {
                SinoSpace.Common.ValidateNumber validateNumber = new SinoSpace.Common.ValidateNumber();
                code = validateNumber.CreateValidateNumber(6);
                validateNumber.CreateValidateGraphic(this, code);
            }

    然后我需要在服务器端保存这个code.现在存在问题了。这个code值我怎么保存了。最常见的办法是使用Session保存这个值。
    然后我页面验证的时候是用脚本进行的。使用脚本访问webService:
           public bool ValidateCode(string code)
            {
                //object obj = HttpRuntime.Cache.Get("validateCode");
                //string _code = obj.ToString();          
                if (code == _code)
                {
                    return true;
                }
                return false;
            }

    这样问题就出来了。webService没有办法读到Session的值。回出现未将对象应用到实例的错误。我不能应用Cache方法。因为那样另外一个用户会覆盖这个值。也不能使用cookie,这样的话。值在可以客户端,就达不到验证码的目的了。这样一来我需要在解决这个问题呢?
    郭鹏
    2009年8月12日 16:33

答案

全部回复

  • 你好!你可以在脚本中使用 Ajax 读取 Session。
    知识改变命运,奋斗成就人生!
    2009年8月12日 18:41
    版主
  • 请问你的Web Service是怎么创建的呢?是页面里的静态ajax方法吗?

    Web Service要单独启用Session才可以使用会话状态的,请设置WebMethod的EnableSession为true即可为web service启用session。请参考:http://msdn.microsoft.com/zh-cn/library/system.web.services.webmethodattribute.enablesession(VS.80).aspx

    另外,如果你的验证码页面和web service不在同一个应用程序,那么session是不能跨应用读取的,应该考虑其他方式来共享。
    Facing problems, think first, then search, finally ask.
    • 已标记为答案 Hugo12345 2009年8月13日 7:17
    2009年8月12日 23:57
    版主
  • 你好,如ShinyZhu所述 设置 WebMethod的EnableSession为true
     [ WebMethod(Description="验证验证码是否正确",
       EnableSession=true)]
     public bool ValidateCode(string code)
            {
                //object obj = HttpRuntime.Cache.Get("validateCode");
                //string _code = obj.ToString();         
                if (code == _code)
                {
                    return true;
                }
                return false;
            }


    但是如果你测试你会发现即便这样你的Session也读取不到的,在访问WebService的时候需要设置CookieContainer 这个CookieContainer中需要包含唯一标识SessionId等信息


    你可以直接在页面的后台通过Page.Session来验证为什么还要通过Webservice呢?
    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年8月13日 2:05
    版主
  • webservice s应该可以得到session   只要你配置好cookie
    答案破千
    2009年8月13日 2:39
  • 你好,Web Service可以实现,楼上已经说的很清楚了,你也可以使用hidden字段,这样就很简单了。

    jon.valett@gmail.com
    2009年8月13日 2:50
    版主