2

.Expirescookie属性に問題があります。クッキーを読み返すと、01/01/000112:00AMに戻ってきます。

これがコードです。デバッグ目的でのみ、保存のすぐ下にリトリーブを追加しました。保存と取得は、同じファイル内の異なる場所で行われます。Cookieをサイト全体に存在させたいので、意図的にドメインを指定しませんでした。

データは、有効期限だけでなく、うまく表示されます。

注:.NetFramework4を使用してローカルホストで実行されているVisualStudio2012でテストしています。

System.Web.UI.Page oPage = this.Page;

HttpCookie oCookie = new HttpCookie("UserData");

// Set the cookie value.
oCookie.Secure = false;
oCookie["Field1"] = strField1;
oCookie["Field2"] = strField2;
oCookie.Expires = DateTime.Now.AddDays(1);

// Add the cookie.
oPage.Response.Cookies.Add(oCookie);


// Get the cookie.
oCookie = new HttpCookie("UserData");
oCookie = oPage.Request.Cookies["UserData"];
4

3 に答える 3

4

ブラウザは、Cookieの名前と値を除いてサーバーに何も送信しません。他のすべてのプロパティ(有効期限、ドメイン、パス、httponly、...)は、Cookieが設定された後のリクエストでは取得できません。

これに対処するためのより一般的な方法は、保護されたリソースにアクセスしようとしたときにユーザーをログインページにリダイレクトし、「このページを表示するにはログインする必要があります。以前にログインした場合はログインする必要があります。 、セッションの有効期限が切れている可能性があります。」

(また、ユーザーが引き続きサイトを使用してもログアウトされないように、リクエストごとにCookieを再設定する必要があることに注意してください。これを行っているかどうかは、コードからはわかりません。)

于 2013-01-14T19:40:18.050 に答える
1

私は自分の問題についてもう少しグーグル検索をしていて、このリンクを見ました。Stackoverflowに別の投稿があります。

クッキーは常に有効期限が切れています

また、構成を使用して検証しています。

if (cookie != null && cookie.Expires > DateTime.Now)...

いくつか指摘されているように、Cookieを取得できなくなった場合は、有効期限のチェックが行われます。これは、このアーキテクチャを構築した人には真剣に愚かです。はい、おそらくRequestCookieとResponseCookieがあるはずですが、ResponseCookieには有効期限がありません。

私に返事をくれた人は、それは単に期限切れになるだけでなく、他の分野でもあると教えてくれました。

于 2013-01-14T19:50:57.100 に答える
0

C#コードでは、フォーム認証を使用している場合、以下のコードを使用してCookieが永続的であるかどうかを確認できます
bool IsCookiePersistent = ((FormsIdentity)User.Identity).Ticket.IsPersistent;

ここでは、 DateTimeプロパティを持つTicketを返します。FormsAuthenticationTicketExpiration

于 2018-10-25T09:19:45.867 に答える