#asp.net
#asp.net
Вопрос:
У меня есть проблема с уничтожением значения pre cookie в asp.net . Позвольте мне объяснить описание проблемы здесь.
На нашем веб-сайте есть две страницы. Допустим, login.aspx и mainpage.aspx. Мое требование — изменить идентификатор сеанса после входа в систему. Для этого случая мы интегрировали следующий скрипт на странице входа, прежде чем перенаправлять на главную страницу что-то вроде этого, чтобы изменить идентификатор сеанса после входа в систему.
protected void btnLogIn_Click(object sender, EventArgs e)
{
regenerateId();
Response.Redirect("mainpage.aspx");
}
void regenerateId()
{
System.Web.SessionState.SessionIDManager manager = new System.Web.SessionState.SessionIDManager();
string oldId = manager.GetSessionID(Context);
string newId = manager.CreateSessionID(Context);
bool isAdd = false, isRedir = false;
manager.SaveSessionID(Context, newId, out isRedir, out isAdd);
HttpApplication ctx = (HttpApplication)HttpContext.Current.ApplicationInstance;
HttpModuleCollection mods = ctx.Modules;
System.Web.SessionState.SessionStateModule ssm = (SessionStateModule)mods.Get("Session");
System.Reflection.FieldInfo[] fields = ssm.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
SessionStateStoreProviderBase store = null;
System.Reflection.FieldInfo rqIdField = null, rqLockIdField = null, rqStateNotFoundField = null;
foreach (System.Reflection.FieldInfo field in fields)
{
if (field.Name.Equals("_store")) store = (SessionStateStoreProviderBase)field.GetValue(ssm);
if (field.Name.Equals("_rqId")) rqIdField = field;
if (field.Name.Equals("_rqLockId")) rqLockIdField = field;
if (field.Name.Equals("_rqSessionStateNotFound")) rqStateNotFoundField = field;
}
object lockId = rqLockIdField.GetValue(ssm);
if ((lockId != null) amp;amp; (oldId != null)) store.ReleaseItemExclusive(Context, oldId, lockId);
rqStateNotFoundField.SetValue(ssm, true);
rqIdField.SetValue(ssm, newId);
}
После перенаправления на главную страницу мы можем увидеть, что идентификатор сеанса был изменен. Это нормально до сих пор.
Но все еще может получить доступ к старым деталям сеанса. Если мы введем старый идентификатор сеанса, мы все равно сможем увидеть всю внутреннюю информацию на главной странице. Итак, как уничтожить значение pre cookie после входа в систему. Не могли бы вы объяснить, как справиться с этим случаем.
Комментарии:
1. Почему вы используете веб-формы?
2. Что вы подразумеваете под «предварительным cookie»?
3. Интегрированный вами «скрипт» совершенно ужасен. Вы не должны использовать отражение для этого.