为什么asp.net会在某些设备上随机创建Cookie?

时间:2018-02-18 15:51:32

标签: c# asp.net .net asp.net-mvc cookies

我有一个Web服务器:

Windows Server 2008 R2 X64

IIS版本:7.5.7600.16385

By this link我们已检查)我们机器上安装的.net是:4.7(460805)

我们的网站是在.net 4.7和MVC 5上开发的,我们使用ASP.NET Forms身份验证来验证我们的客户。

在加载登录页面时,我们编写了一个简单的测试cookie:

 HttpCookie cookie = new HttpCookie("test", "123"); 
 cookie.Expires = DateTime.UtcNow.AddYears(1);
 Response.Cookies.Add(cookie);

当用户点击登录按钮时,我们读取该cookie并计算所有cookie:

  if (Request.Cookies["test"] == null)
        {
           if (Request.Cookies.Count > 0)
                {
                    for(int i=0;i< Request.Cookies.Count;i++)
                        Loger.PointLoger.LogIt("Cookies:" + 
                        Request.Cookies[i].Name 
                       +"   Value: "+ Request.Cookies[i].Value);
                }

              HttpBrowserCapabilitiesBase bc = Request.Browser;
         ...//Some codes to log 
      }

通过这种方式,我们可以确定,编写cookie是可以启用的,我们可以编写我们的身份验证cookie。如果我们无法读取该测试cookie,我们会将用户重定向到另一个页面....

我们的一些用户报告说,他们无法登录我们的网站,我们的服务器日志显示我们无法在他们的设备上编写cookie,重要的是在他们的设备上启用写入cookie。

在做了一些测试之后,我们发现编写cookie是随机的或类似的东西,有一次可以,而另一次则没有。

通过此代码,我们收集了一些用户的信息:

   HttpBrowserCapabilitiesBase bc = Request.Browser;
                ...
        "IsMobileDevice:" + bc.IsMobileDevice
         "-Browser:" + bc.Browser
                ...

例如:

Cookies.Count: 2

Cookies:_ga   Value: GA1.2.163980100.1507000247
Cookies:_gid   Value: GA1.2.1373100693.1518900032

 IsMobileDevice:True
-Browser:Chrome
-Beta:False
-Platform:Unknown
-Type:Chrome47
-Version:47.0
-MobileDeviceModel:Unknown
-MobileDeviceManufacturer:Unknown
-GatewayMajorVersion:0
-MinorVersion:0
-MinorVersionString:0
-MajorVersion:47
-GatewayVersion:None
-Id:chrome
-HasBackButton:True
-Cookies:True
-ClrVersion: 0.0
-InputType:keyboard

乳清这些饼干(_gid和_ga)已经写好但我们的测试饼干没有?

我读了一些帖子,如:

Asp.Net Forms Authentication when using iPhone UIWebView

ASP MVC Cookies not persisting

C# Login code not work on safari

Strange problem with cookies in Safari and Asp.net

现在问题是:是否在.NET 7上出现问题?如果是什么解决方案?

我在这里通过了我们项目的一些代码,并且由于安全性,我用“.....”代替了一些代码:

在Web.config上:

<authentication mode="Forms">
  <forms domain=".mysite.com" name="abc"  cookieless="UseCookies"
    enableCrossAppRedirects="true" loginUrl="/Accounts/Login" 
    timeout="2880" requireSSL="false" path="/" />
   </authentication>

 <machineKey compatibilityMode="Framework45" validationKey="C121487......" 
 decryptionKey="7E43716E4C97....." validation="SHA1" decryption="AES" />

    <sessionState mode="InProc" customProvider="DefaultSessionProvider" cookieless="UseCookies"  cookieName="debnf">
      <providers>
        <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf38...." connectionStringName="DefaultConnection" />
      </providers>
    </sessionState>

在App_Browsers中:

 <browsers>
    <browser refID="Default">
      <capabilities>
      <capability name="cookies" value="true" />
      </capabilities>
   </browser>
 </browsers>

更新:

这是我的主要代码:

我在这里写这个测试cookie

public ActionResult Login()
{     
  HttpCookie cookie = new HttpCookie("test", "123");
  cookie.Expires = DateTime.UtcNow.AddHours(1);
   Response.Cookies.Add(cookie);
  return View();
 }

当用户点击登录时,我在这里检查该cookie:

 [HttpPost]
 public ActionResult Login(LoginModel loginModel)
  {
    if (Request.Cookies["test"] == null)
      {
     .....

      } 

  }

0 个答案:

没有答案