ASP.NET Masters: Каковы преимущества / недостатки использования Переменных сеанса?

Может ли кто-нибудь проверить или оспорить мою наивную гипотезу?

Необъяснимый, он будет работать без [DataContract], потому что происходит то, что сериализатор просто отказывается от использования атрибутов и сериализовать его только по именам свойств. Они идентичны вашему атрибуту, поэтому вы этого не замечаете. Вы должны быть в состоянии убедиться, что, передав [DataMember], который пришел без правильного [DataContract] другого Name текста, сериализатор все равно будет использовать имя свойства и игнорировать атрибут. Эти атрибуты работают как пара. Установите оба или вернитесь к «нет».

public class ClassInner
{
    // This is ignored because no [DataContract] was found
    [DataMember(Name = "nonexistentProperty")] 

    // This will still be set unobfuscated because the property name matches
    public string stringProperty2 { get; set; }
}

Поэтому, когда вы запутываете его, имена свойств меняются. Без [DataContract] для начала сериализатор обратится к атрибутам и найдет только случайные комбинации букв, которые он не может сопоставить с входными данными. Следовательно, вы получите null.

21
задан MathieuF 1 May 2012 в 11:41
поделиться

8 ответов

Во-первых, браузер будет делать только два запроса к данному имени хоста в данный момент времени. По большей части эти запросы относятся к статическому контенту (файлы JS, CSS и т. Д.). Таким образом, сериализация запросов к динамическому контенту - не та проблема, о которой можно подумать. Кроме того, я думаю, что это может быть перепутано с классическим ASP, где страницы, которые используют Session, определенно сериализуются, я не верю, что это имеет место с ASP.Net.

С состоянием сеанса ASP.Net (режим SQL, сервер состояний или пользовательская) у вас есть реализация, которая является стандартной и последовательной во всем приложении. Если вам не нужно делиться информацией о сеансе, это ваш лучший выбор. Если вам нужно поделиться информацией с другими средами приложений (php, swing / java, classic asp и т. Д.), Возможно, стоит подумать.

5
ответ дан 29 November 2019 в 20:06
поделиться

My experience has been that the session is a good means of managing state when you use it appropriately. However, often times it's misused, causing the "never ever use the session" sentiment shared by many developers.

I and many other developers have ran into major performance issues when we mistakenly used the session to store large amounts of data from a database, so as to "save a trip." This is bad. Storing 2000 user records per session will bring the web server to its knees when more than a couple of users use the application. Session should not be used as a database cache.

Storing an integer, however, per session is perfectly acceptable. Small amounts of data representing how the current user is using your application (think shopping cart) is a good use of session state.

To me, it's really all about managing state. If done correctly, then session can be one of many good ways to manage state. It should be decided in the beginning on how to manage state though. Most often times, we've run into trouble when someone decides to just "throw something in the session".

I found this article to be really helpful when using out-of-process modes, and it contains some tips that I would have never thought of on my own. For example, rather than marking a class as serializable, storing its primitive datatype members in separate session variables, and then recreating the object can improve performance.

17
ответ дан 29 November 2019 в 20:06
поделиться

Во-первых, вы, коллега, внедряете свою собственную систему управления сеансами с поддержкой БД, я не вижу преимущества в этом использовании встроенного состояния сеанса, хранящегося в базе данных (по умолчанию используется MS SQL нет причины не использовать Oracle вместо этого).

Является ли его решение лучше встроенного? Вряд ли. Это намного больше работы для вас для начала. Вот простая иллюстрация почему. Допустим, вы используете куки для хранения своего идентификатора. Как вы справляетесь с пользователем, который отключает куки? Если вы используете состояние сеанса ASP.Net, проблем нет, так как он вернется к использованию строки запроса. С идеей ваших коллег вы должны бросить свою собственную.

Там есть очень правильный вопрос о том, есть ли у вас состояние сеанса вообще. Если вы можете разработать свое приложение, не требуя какого-либо состояния сеанса, вам будет гораздо проще масштабировать и тестировать время. Очевидно, что у вас может быть состояние приложения , которое в любом случае должно находиться за пределами сеанса (простой регистр, имя пользователя и пароль), но вы все равно должны хранить эти данные независимо от того, есть ли у вас состояние сеанса.

7
ответ дан 29 November 2019 в 20:06
поделиться

Реализация Session State в MS сама по себе не является злом ... она используется некоторыми разработчиками. Как упоминалось выше, использование встроенного поставщика состояния сеанса означает, что вам не нужно заново изобретать проблемы безопасности, устаревания и параллелизма. Только не начинайте заедать много мусора в сеансе, потому что вы слишком ленивы, чтобы найти лучший способ управлять переходами между состояниями и страницами. Сеанс не очень хорошо масштабируется ... если каждый пользователь на вашем сайте заполняет кучу объектов в сеансе, и эти объекты занимают небольшую часть конечной памяти, доступной вашему приложению, вы столкнетесь с проблемами раньше, чем позже, по мере роста популярности вашего приложения. Используйте сессию так, как она была разработана: токен, чтобы показать, что пользователь все еще «использует» ваш сайт.

6
ответ дан 29 November 2019 в 20:06
поделиться

Вы должны быть осторожны при использовании Session, поскольку несколько запросов к одному и тому же объекту Session обычно ставятся в очередь: см. «Параллельные запросы и состояние сеанса» http: // msdn. microsoft.com/en-us/library/ms178581.aspx.

Note, который можно установить для EnableSessionState значение ReadOnly , чтобы разрешить одновременный доступ для чтения к состоянию сеанса.

Эта организация очередей хороша, так как она означает, что разработчики могут использовать Session, не заботясь о синхронизации.

Я бы не согласился с рекомендацией вашего коллеги «никогда» не использовать Session, и я, конечно же, не стал бы обсуждать свою собственную. ,

6
ответ дан 29 November 2019 в 20:06
поделиться

Are there any security concerns with this?

If you roll your own you'll have to handle Session Fixation and Hijacking attacks, whereas using the built-in Session I think they are handled for you (but I could be wrong).

3
ответ дан 29 November 2019 в 20:06
поделиться

the home made session as you have described is doing nothing different "SQL" state of .Net sessions and in my experience i dont think session degrades your performance in anyway. building your own session manager will require putting in several other plumbing tasks along - security, flushing it out, etc.

the advantage with in-built sessions is its easy to use with all this plumbing already been taken care of. with "SQL" mode you can persist the session data in database thus allowing you to run your app on web-farms without any issues.

we designed a b2b ecommerce app for fortune 57 company which processes over 100k transactions a day and used sessions [SQL mode] quite extensively without any problems whatsover at all.

3
ответ дан 29 November 2019 в 20:06
поделиться

Исправьте меня, если я ошибаюсь:

Основное преимущество хранения состояния сеанса в БД, например, в SQL Server, заключается в том, что вы не потребляете ресурсы памяти, а вместо этого сохраняете их в диск в БД.

Недостатком является то, что вы выполняете операцию ввода-вывода, чтобы извлекать эту информацию из базы данных каждый раз, когда вам это нужно (или, может быть, SQL Sever даже делает какое-то волшебное кеширование данных для вас на основе недавно выполненных запросов? )

В любом случае, такая цена ввода-вывода для извлечения информации о сеансе из базы данных за поездку на веб-сервер представляется более безопасной стратегией для сайтов, которые сталкиваются с большим трафиком.

2
ответ дан 29 November 2019 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: