#c# #asp.net #cookies
#c# #asp.net #файлы cookie
Вопрос:
Я пытаюсь создать систему входа в систему на основе файлов cookie (чтобы не выделять при закрытии или обновлении страницы)
это код, лежащий в основе Login.aspx.cs:
string cmdText = "SELECT Username,Role FROM Login WHERE Username = '" TextBox1.Text "' AND Password = '" TextBox2.Text "'";
string username = "";
string role = "";
using (SqlCommand SelectCommand = new SqlCommand(cmdText, connectionstring))
{
SqlDataReader myReader;
connectionstring.Open();
myReader = SelectCommand.ExecuteReader();
while (myReader.Read())
{
username = myReader["username"].ToString();
role = myReader["role"].ToString();
}
myReader.Close();
if (!string.IsNullOrEmpty(username))
{
string script = "alert("Login successful!");";
ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", script, true);
connectionstring.Close();
//STORE userinfo into cookie,set cookie Expires 1 day more
Response.Cookies["username"].Path = username;
Response.Cookies["username"].Expires = DateTime.Now.AddDays(1);
Response.Cookies["username"].Path = "/";
Response.Cookies["role"].Path = role;
Response.Cookies["role"].Expires = DateTime.Now.AddDays(1);
Response.Cookies["role"].Path = "/";
if (role.Equals("admin"))
{
Response.Redirect("admin.aspx");
Label1.Text = "admin";
}
if (role.Equals("doctor"))
{
Response.Redirect("doctor.aspx");
Label1.Text = "doc";
}
if (role.equals("patient"))
{
Response.Redirect("patient.aspx");
}
}
else
{
string script = "alert("Login Failed!");";
ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", script, true);
connectionstring.Close();
}
}
}
но, похоже, у меня возникли проблемы с перенаправлением на нужную мне страницу.
когда я ввожу имя пользователя и пароль для роли администратора. Он сообщает, что вход в систему выполнен успешно, но не переходит на страницу администратора.
Почему это так? Я что-то упустил?
Для администратора (и других страниц) Я использую этот код для чтения файлов cookie
string role = "";
string username = "";
if (Request.Cookies["role"] != null)
{
role = Request.Cookies["role"].Value;
}
if (Request.Cookies["role"] != null)
{
username = Request.Cookies["username"].Value;
}
if (role == "patient ")
{
//SET control visible=false if no right.
Button1.Visible = false;
}
и это для редактирования файлов cookie после входа в систему и / или после того, как пользователь поет
//create cookie
Response.Cookies["username"].Value = Server.UrlEncode("abc");
Response.Cookies["username"].Expires = DateTime.Now.AddDays(1);
Response.Cookies["username"].Path = "/";
//modify cookie value
Response.Cookies["username"].Value = Server.UrlEncode("def");;
Response.Cookies["username"].Expires = DateTime.Now.AddDays(1);
Response.Cookies["username"].Path = "/";
//delete cookie value
//delete cookie infact is set Expires is past day DateTime.Now.AddDays(-1);
Response.Cookies["username"].Value = Server.UrlEncode("def");
Response.Cookies["username"].Expires = DateTime.Now.AddDays(-1);
Response.Cookies["username"].Path = "/";
//checking if cookie exist and reading it.
if (Request.Cookies["role"] != null)
{
role = Server.UrlDecode(Request.Cookies["role"].Value);
}
но, похоже, я что-то упускаю, чего я не понимаю. Я думаю, что проблема заключается в функции if, здесь:
if (role.Equals("admin"))
есть предложения? правильно ли это использовать файлы cookie?
Комментарии:
1. Зачем заново изобретать колесо? asp.net вся эта функциональность уже встроена. И поскольку ваш код сейчас очень уязвим для SQL-инъекций, и ваши файлы cookie, вероятно, небезопасны. Погуглите
asp net authentication
или прочитайте эту статью: c-sharpcorner.com/uploadfile/syedshakeer /…2. Вы получаете какие-либо сообщения об ошибках для response.redirect?
3. @Balaji я не могу повторно подключиться к нужной странице. в соответствии с ролью (доктор) Я не перенаправляюсь ни на одну страницу. он просто остается там, на странице входа.
4. @VDWWD Большое спасибо. Я постараюсь взглянуть на это. но не могли бы вы, пожалуйста, попытаться ответить на это, а не просто прокомментировать, чтобы я мог указать это в качестве ответа?
5. вы можете его отладить? либо с использованием VS, либо с помощью отладки javascript?
Ответ №1:
Я тоже новичок в файлах cookie, но после нескольких часов поиска в Google я использую файлы cookie таким образом, и это работает, надеюсь, это поможет вам
добавить файлы cookie:
string UserData = _User "/" _Password;
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1 , _User , DateTime.Now, DateTime.Now.AddMinutes(60), _KeepLoggedIn, UserData);
string encrypted = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Name = "SESSION";
Response.Cookies.Add(cookie);
Для чтения файлов cookie:
HttpCookie cookie = HttpContext.Current.Request.Cookies.Get("SESSION");
if (cookie != null)
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
var userName = ticket.Name;
var userData = ticket.UserData.Split('/').ToArray();
string _User = userData[0];
string _Password = userData[1];
... Your code to authenticate and 'Response.Redirect'...
}
Чтобы «удалить» файлы cookie:
int limit = Request.Cookies.Count; //Get the number of cookies and
//use that as the limit.
HttpCookie aCookie; //Instantiate a cookie placeholder
string cookieName;
//Loop through the cookies
for (int i = 0; i < limit; i )
{
cookieName = Request.Cookies[i].Name; //get the name of the current cookie
aCookie = new HttpCookie(cookieName); //create a new cookie with the same
// name as the one you're deleting
aCookie.Value = ""; //set a blank value to the cookie
aCookie.Expires = DateTime.Now.AddDays(-1); //Setting the expiration date
//in the past deletes the cookie
Response.Cookies.Add(aCookie); //Set the cookie to delete it.
}
Ответ №2:
Зачем заново изобретать колесо? asp.net вся эта функциональность уже встроена. И поскольку ваш код сейчас очень уязвим для SQL-инъекций, и ваши файлы cookie, вероятно, небезопасны. Google asp net authentication
Этот простой учебник покажет вам, как начать работу: http://www.c-sharpcorner.com/uploadfile/syedshakeer/formsauthentication-in-Asp-Net /
Вам также необходимо будет создать базу данных для хранения пользователя, паролей, ролей и т. Д. Эта статья может помочь вам в этом: https://www.asp.net/web-forms/overview/older-versions-security/membership/creating-the-membership-schema-in-sql-server-vb
Также, если вы создадите новый проект в Visual Studio, он добавит форму входа (и многое другое), чтобы вы могли использовать ее в качестве примера. Файл> Новый проект> Веб > ASP.NET Веб-приложение