ASP.NET_SessionId+owin Cookies不發(fā)送到瀏覽器我在使用owin cookie身份驗(yàn)證時(shí)遇到了一個(gè)奇怪的問(wèn)題。當(dāng)我啟動(dòng)IIS服務(wù)器時(shí),身份驗(yàn)證在IE/Firefox和Chrome上非常好。我開始在不同的平臺(tái)上進(jìn)行身份驗(yàn)證和登錄測(cè)試,并出現(xiàn)了一個(gè)奇怪的錯(cuò)誤。偶爾,owin框架/IIS不向?yàn)g覽器發(fā)送任何cookie。我將輸入一個(gè)用戶名和密碼,這是正確的代碼運(yùn)行,但沒(méi)有cookie被傳遞到瀏覽器。如果我重新啟動(dòng)服務(wù)器,它就會(huì)開始工作,然后在某個(gè)時(shí)候嘗試登錄,然后cookie再次停止交付??邕^(guò)代碼,什么也不做,也不會(huì)拋出任何錯(cuò)誤。 app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
CookieHttpOnly = true,
AuthenticationType = "ABC",
LoginPath = new PathString("/Account/Login"),
CookiePath = "/",
CookieName = "ABC",
Provider = new CookieAuthenticationProvider
{
OnApplyRedirect = ctx =>
{
if (!IsAjaxRequest(ctx.Request))
{
ctx.Response.Redirect(ctx.RedirectUri);
}
}
}
});更新1:?jiǎn)栴}的一個(gè)原因似乎是當(dāng)我在會(huì)話中添加項(xiàng)目時(shí),問(wèn)題就開始了。添加一些簡(jiǎn)單的東西,比如Session.Content["ABC"]= 123似乎造成了這個(gè)問(wèn)題。我能看到的是:1)(Chrome)當(dāng)我登錄時(shí),我得到ASP.NET_SessionId+我的身份驗(yàn)證cookie。2)我瀏覽了一頁(yè)設(shè)置會(huì)話的頁(yè)面.內(nèi)容.3)打開一個(gè)新瀏覽器(Firefox)并嘗試登錄,它既不會(huì)接收ASP.NET_SessionId,也不會(huì)獲得身份驗(yàn)證Cookie 4)當(dāng)?shù)谝粋€(gè)瀏覽器具有ASP.NET_SessionId時(shí),它將繼續(xù)工作。從我刪除這個(gè)cookie的那一刻起,它就和我正在處理的IP地址(10.x.x)和本地主機(jī)上的所有其他瀏覽器一樣的問(wèn)題。更新2:力的創(chuàng)造ASPNET_SessionId在使用owin進(jìn)行身份驗(yàn)證之前,首先在登錄_LOAD頁(yè)面上。1)在我驗(yàn)證自己的身份之前,我先做一個(gè)隨機(jī)的Session.Content值,以啟動(dòng)ASP.NET_SessionId 2),然后進(jìn)行身份驗(yàn)證并進(jìn)行進(jìn)一步的會(huì)話(3)其他瀏覽器現(xiàn)在似乎可以工作了。這太奇怪了。我只能得出結(jié)論,這與ASP和owin認(rèn)為他們?cè)诓煌念I(lǐng)域或類似的事情有關(guān)。更新3-兩者之間的奇怪行為。另外還發(fā)現(xiàn)了一些奇怪的行為-OWIN和ASP會(huì)話的超時(shí)是不同的。我看到的是,通過(guò)某種機(jī)制,我自己的會(huì)話比我的ASP會(huì)話的生存期更長(zhǎng)。因此,當(dāng)?shù)卿洉r(shí):1.)我有一個(gè)以烹飪?yōu)榛A(chǔ)的第二節(jié)課。)我設(shè)置了幾個(gè)會(huì)話變量我的會(huì)話變量(2)在owin cookie會(huì)話變量之前“死亡”強(qiáng)制重新登錄,這會(huì)導(dǎo)致整個(gè)應(yīng)用程序中的意外行為。(Person登錄,但沒(méi)有真正登錄)更新3B在深入研究之后,我在頁(yè)面上看到了一些評(píng)論,其中說(shuō)“Forms”身份驗(yàn)證超時(shí)和會(huì)話超時(shí)需要匹配。我認(rèn)為正常情況下,兩者是同步的,但無(wú)論出于什么原因,兩者并不同步。解決辦法概述1)始終先創(chuàng)建一個(gè)會(huì)話,然后再進(jìn)行身份驗(yàn)證。基本上是在啟動(dòng)應(yīng)用程序時(shí)創(chuàng)建會(huì)話。Session["Workaround"] = 0;2)[實(shí)驗(yàn)性的]如果持久化cookie,請(qǐng)確保自己的超時(shí)/長(zhǎng)度比web.config中的sessionTimeout長(zhǎng)(在測(cè)試中)
3 回答

當(dāng)年話下
TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
HttpContext.Current.Response.Cookies
app.UseKentorOwinCookieSaver();app.UseCookieAuthentication(new CookieAuthenticationOptions());
- 3 回答
- 0 關(guān)注
- 429 瀏覽
添加回答
舉報(bào)
0/150
提交
取消