×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

奇怪的ASP.net匿名用户的问题: Request.AnonymousID 在页面每次刷新的时候,都生成新的GUID。 很纳闷,IE中有问题,Firefox就维持不变。问题导致想用匿名用户ID管理购物车或者Preference参数没法保存。

各位大侠有没有碰到过?
web。config中用的property和AnonymousIdentification也都设置允许匿名了。

另外就是,开发环境没问题,上传服务器后就有问题。 查了一圈 google,说是域名和cookie设置问题,我都试过,IE的安全也设最低。就是不行。 Firefox就不存在这个问题。 Firefox每次Request.AnonymousID都保持同一值(正常应该是这样的), IE在登录的用户就没问题,登录后就维持一个ID,就是匿名有问题。


<authentication mode="Forms">
<forms cookieless="UseCookies" name=".ASPXFORMSAUTH" loginUrl="~/login.aspx" slidingExpiration="true" />
</authentication>


<anonymousIdentification
enabled="true"
cookieless="UseCookies"
cookieName=".ASPXANONYMOUS"
cookieSlidingExpiration = "true"
domain="abc.ca"

/>
Report

Replies, comments and Discussions:

  • 工作学习 / 学科技术讨论 / 奇怪的ASP.net匿名用户的问题: Request.AnonymousID 在页面每次刷新的时候,都生成新的GUID。 很纳闷,IE中有问题,Firefox就维持不变。问题导致想用匿名用户ID管理购物车或者Preference参数没法保存。
    各位大侠有没有碰到过?
    web。config中用的property和AnonymousIdentification也都设置允许匿名了。

    另外就是,开发环境没问题,上传服务器后就有问题。 查了一圈 google,说是域名和cookie设置问题,我都试过,IE的安全也设最低。就是不行。 Firefox就不存在这个问题。 Firefox每次Request.AnonymousID都保持同一值(正常应该是这样的), IE在登录的用户就没问题,登录后就维持一个ID,就是匿名有问题。


    <authentication mode="Forms">
    <forms cookieless="UseCookies" name=".ASPXFORMSAUTH" loginUrl="~/login.aspx" slidingExpiration="true" />
    </authentication>


    <anonymousIdentification
    enabled="true"
    cookieless="UseCookies"
    cookieName=".ASPXANONYMOUS"
    cookieSlidingExpiration = "true"
    domain="abc.ca"

    />
    • 先把 IE 的所有 cookie & cache 都删掉,然后用 ASP.NET 写一个简单 cookie 看看 IE 能不能读?会不会是 IE 的设定没打开?
      • 换过好几台电脑测试都不行。 另外就是登录后 ID能维持,说明IE端不是问题。
        • 不清楚为什么只发生在 IE ,但是我觉得如果你只想要暂时允许匿名用户,可以用很多其他的方法,你甚至直接写一个自己的 class 到 cookie 里,不一定要用 MS 提供的那个做识别
          • 是的,自己写没问题。就是奇怪,这个MS的东西有时莫名其妙。自己写有个问题,就是每次要记住匿名用户的身份还得要用一个ID,随机生成后要在cookie中维持不变,这ID就是个问题,用客户端Mac地址?还是啥好?否测购物车没法保持
            • 不知道你说的那个问题是什么意思。我会这样做
              首先

              interface IUserHandler
              {
              UserData GetCurrentUser()
              void UpdateCurrentUser (UserData user)
              }

              [serialize]
              class UserData
              {
              bool IsAnonymous; // it could be false by default or return string.IsNullOrEmpty(UserName);
              string UserName;
              string UserPwd
              }

              class CookieUserHandler : IUserHandler
              {
              UserData GetUser()
              {
              HttpCookie myCookie = Request.Cookies["your_cookie_name"];
              // you need to deserialize the object from here back to UserData
              }
              }


              如果你是用 MVC, 就再写一个 action attribute

              我很久没有实际操作过这些东西,但大概的思路就是这样。你可以用 form authentication,但是登录之后就写到自己的 serialized object 里,不要依赖 MS 的东西。
              • 匿名用户,俗称游客,就是到此一游。还没有username和pasword。通常用cookie或者session存储他的身份和购物车等信息(即使你写入数据库,也必须在一段时间内有想对固定的ID身份,才能重新取出该游客的购物车内容,否则对不上号)。
                用session的话没问题,但是用户关了电脑后再来就啥都保留不下来了。cookie可以保留一段时间,或者保存入数据库,但必须要一个唯一id去重新取出来。 也就是我说的问题,我首先想到是mac地址和ip地址。
                • 你所有的信息都是放在 cookie 就可以,干嘛要ID。cookie 设个 expiration 就可以。说写一个 serialize object,无论匿名用户还是注册用户都用那个就可以了, 用户再访问的时候你可以直接读你网站写过的 cookie (不需要 ID 啊)
                  • 被微软那个集成的Profile的AnonymousID的原理搞晕头,还想着要存到数据库保存然后还要从匿名到实名的转移。你说的对,cookie就行了,如果客户不支持cookie做啥都没用,只好用session或cache之类的,临时保持一下购物车了
      • 问题居然是这样的,解决了。这是个刚装完系统的服务器,居然没来得及设置时区,时间不对,cookie当然就对不上号了。坑爹啊!