Scenerio - я пишу веб-приложение, основанное на том, с какого поля входа вы используете (database1 и database2), он подключит вас к базе данных для совместного использования. Я установил web.config для хранения обеих строк соединения. В методе On_Authenticate каждого окна я проверяю аутентификацию пользователя, а затем отправляю строку на основе поля входа в общедоступную переменную в классе User Authenticate. Эта общедоступная переменная проверяет файл cookie и получает имя строки соединения из переменной, если cookie имеет значение null, он устанавливает новый файл cookie, истекает все существующие файлы cookie и устанавливает значения cookie.C# Cookie не сохраняет свою информацию
Теперь, когда это делается, каждый раз, когда я попадаю в базу данных (используя LINQ2SQL), я создаю datacontext и отправляю AuthenticatedUser.ConnectionString. Это проверит файл cookie и отправит строку подключения для использования данных. 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 = "";
}
}
}
Теперь это, кажется, работает на первом клике от входа. Когда я ввожу информацию о пользователе, и я прохожу через процесс, я вижу cookie, который установлен/Однако в первом истинном вызове базы данных, где я использую PortalDataContext db = new PortalDataContext(AuthenticatedUser.ConnectionString);
. Я получаю ошибку нулевой ссылки. Он проходит через Get, и он проверяет файл cookie и возвращает нулевой файл cookie. Что здесь может быть?
То, что я занимаюсь, это имя соединения, а не фактическая строка соединения. Я отправляю это имя в GetConnectionStringFromName(), чтобы получить строку соединения – EvanGWatkins
@Evan - извините, я пропустил это. Итак, все, что вам нужно сделать, это сохранить cookie в ответе. – tvanfosson
Спасибо, я не могу поверить, что я это смотрел. Благодаря! – EvanGWatkins