C#クッキーは、その情報を保存されていません
-
26-09-2019 - |
質問
のscenerio - 私はあなたが使用したログインボックス(データベース1およびデータベース2)のオフに基づいて、それはcoorespondingデータベースに接続されることをウェブアプリを足すいます。私は両方の接続文字列を保持するためにweb.configファイルを設定しています。各ボックスのOn_Authenticate方法で私は、ユーザーを認証して、ユーザーの認証と呼ばれるクラスのパブリック変数へのログインボックスに基づいて文字列を送信するために確認してください。このパブリック変数のクッキーをチェックし、クッキーがnullの場合、それはすべての既存のクッキーを満了し、新しいクッキーを設定し、クッキーの値を設定し、変数からの接続文字列の名前を取得します。
今これが行われると、毎回私はAuthenticatedUser.ConnectionStringでのDataContextとセンドを作成する(LINQ2SQLを使用して)データベースをヒット。これは、クッキーをチェックして、データを取得するために使用する接続文字列を取得し送信します。 HererはAuthenticatedUserクラスです...
public class AuthenticatedUser : System.Web.UI.Page
{
public static string ConnectionString
{
get
{
HttpCookie myCookie = HttpContext.Current.Request.Cookies["connectionString"];
return GetConnectionStringFromName(myCookie);
}
set
{
if (HttpContext.Current.Request.Cookies["connectionString"] != null)
{
ExpireCookies(HttpContext.Current);
}
var allCookies = HttpContext.Current.Request.Cookies.AllKeys;
HttpCookie cookie = new HttpCookie("connectionString");
cookie.Value = value;
cookie.Expires = DateTime.Now.AddYears(100);
HttpContext.Current.Request.Cookies.Add(cookie);
}
}
private static string GetConnectionStringFromName(HttpCookie myCookie)
{
string connectionStringName = myCookie.Value;
return ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
}
private static void ExpireCookies(HttpContext current)
{
var allCookies = current.Request.Cookies.AllKeys;
foreach (var cook in allCookies.Select(c => current.Response.Cookies[c]).Where(cook => cook != null))
{
cook.Value = "";
cook.Expires = DateTime.Now.AddDays(-1);
current.Request.Cookies.Remove(cook.Name);
cook.Name = "";
}
}
}
さて、これは、ログインから最初のクリックで動作しているようです。私は、プロセスを介してユーザー情報とIのステップで入力すると、私は私がnull参照エラーを取得していますしかし、私はPortalDataContext db = new PortalDataContext(AuthenticatedUser.ConnectionString);
を使用する最初の真のデータベース呼び出しで/設定されているクッキーを見ることができます。これは、Get通過していると、それはクッキーをチェックし、ヌルクッキーを返します。ここで何が起こっているだろうか?
解決
あなたはResponse.Cookiesコレクションにクッキーを追加する必要があります。応答だけでクッキーをユーザーのブラウザに送信されます。