C # cookie no está ahorrando su información
-
26-09-2019 - |
Pregunta
Scenerio - Estoy escribí una aplicación web que basa fuera de las cuales cuadro de inicio de sesión que utiliza (database1 y database2) que se conectará a la base de datos cooresponding. He puesto el web.config para sostener ambas cadenas de conexión. En el método On_Authenticate de cada caja puedo comprobar para autenticar al usuario y luego enviar una cadena basada en la casilla de ingreso a una variable pública en una clase llamada Autenticación del usuario. Este públicas cheques variables para la cookie y recibe el nombre de cadena de conexión de la variable, si la cookie es nulo, se establece una nueva cookie expira todas las cookies existentes y establece los valores de las cookies.
Ahora, una vez hecho esto, cada vez que me golpeó la base de datos (usando LINQ2SQL) creo un DataContext y enviar AuthenticatedUser.ConnectionString. Esto comprobará la cookie y enviarlo obtener la cadena de conexión para utilizar para extraer los datos. Herer es la clase 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 = "";
}
}
}
Ahora bien, esto parece estar trabajando en la primera posición desde el inicio de sesión. Cuando escribo en la información del usuario y yo paso por el proceso que puedo ver la cookie que se establece / Sin embargo, en el primer verdadero llamado de base de datos donde uso PortalDataContext db = new PortalDataContext(AuthenticatedUser.ConnectionString);
estoy recibiendo un error de referencia nula. Por la que atraviesa el Get y comprueba la cookie y devuelve una cookie nula. Lo que podría estar sucediendo aquí?
Solución
Es necesario añadir la cookie a la colección Response.Cookies al establecer que en lugar de la colección Request.Cookies. Sólo las cookies en la respuesta se envían de vuelta al navegador del usuario.