Я провел следующий простой тест:
- В web.config у нас есть: `sessionState timeout = 40 mode = InProc`
- Пустая страница с параметром EnableSessionState = "ReadOnly", установленным в теге страницы.
- Код позади:
protected void Page_Load(object sender, EventArgs e)
{
if (Session["dt"] == null)
Session["dt"] = DateTime.Now;
Session["dt"] = ((DateTime)Session["dt"]).AddYears(1);
Response.Write(Session["dt"].ToString());
}
Результат для параллельных обратных сообщений будет следующим:
1- 13/11/2015 10:00:00 2- 13/11/2016 10:00:00 3- 13/11/2017 10:00:00 4- 13/11/2018 10:00:00 5- 13/11/2019 10:00:00 6- 13/11/2020 10:00:00 ...
Это ясно говорит о том, что переменная сеанса обновляется. В MSDN вы можете найти следующее: http://msdn.microsoft.com/en-us/library/ms178581(v=vs.100).aspx
Вы можете отключить состояние сеанса для приложения, установив для режима состояния сеанса значение Выкл. Если вы хотите отключить состояние сеанса только для определенной страницы приложения, вы можете установить для значения EnableSessionState в директиве @ Page значение false. Для параметра EnableSessionState также можно задать значение ReadOnly, чтобы обеспечить доступ только для чтения к переменным сеанса.
Мы выполняем операции чтения / записи почти на каждой странице нашего приложения. Однако это предотвращает одновременное выполнение двух HTTP-запросов для одного и того же клиента. Первый запрос должен выполняться до тех пор, пока сервер не обработает второй. После некоторых исследований выяснилось, что это было связано с эксклюзивными блокировками сеанса. Из любопытства мы попытались установить состояние сеанса на ReadOnly, и, похоже, он все еще доступен для редактирования, поскольку не определены эксклюзивные блокировки.
Вопросы:
1- Означает ли только чтение только чтение (значит, здесь есть ошибка в asp) или что-то еще?
2- Пока кажется, что сеанс можно редактировать с помощью состояния ReadOnly, есть ли о чем беспокоиться, как вы думаете, безопасно ли продолжать использовать его в производственной среде?
Спасибо