ASP.NET рдпрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рджрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рддреНрд░



ASP.NET рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╕рддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХрд┐рддрдиреЗ рд╡рд┐рдХрд▓реНрдк рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВ, рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рд╕реЗ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо ASP.NET (MVC) рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рддреНрд░ рд░рд╛рдЬреНрдп рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВ, рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗред

рд╕рддреНрд░ рднрдВрдбрд╛рд░рдг SQL рд╕рд░реНрд╡рд░ рд╣реЛрдЧрд╛ ред рд╣рдо EntityFramework рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред


рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛


  1. рдореИрдВ рдпрд╣ рд▓реЗрдЦ рдХреНрдпреЛрдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдБ?
  2. рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг

  3. ASP.NET рдореЗрдВ рд╕рддреНрд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХреМрди рдФрд░ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ

  4. рд╕рддреНрд░ рдкреНрд░рджрд╛рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

  5. рдкрд░реАрдХреНрд╖рдг рдкреНрд░рджрд╛рддрд╛
  6. рдирд┐рд╖реНрдХрд░реНрд╖


рдореИрдВ рдпрд╣ рд▓реЗрдЦ рдХреНрдпреЛрдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдБ?


рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореИрдВ php рдореЗрдВ рд╕рд╛рдЗрдЯреНрд╕ рдбреЗрд╡рд▓рдк рдХрд░ рд░рд╣рд╛ рдерд╛ред рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдореИрдВрдиреЗ рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП ASP.NET рдХреЛ рдЪреБрдирд╛ред ASP.NET рдореЗрдВ php рд╕реЗрд╢рди, рдкреНрд░рд╛рдзрд┐рдХрд░рдг, рд╕рджрд╕реНрдпрддрд╛, рдФрд░ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рдкреНрд░рд┐рдЬреНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореБрдЭреЗ рдХрдИ рд╕рд╡рд╛рд▓реЛрдВ рдФрд░ рдЕрд╕рдВрддреЛрд╖реЛрдВ рдХреЗ рдХрд╛рд░рдг рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдерд╛ рд╡рд╣ рдХрд╖реНрдЯрдкреНрд░рдж рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред

рдЕрдм, рдХреБрдЫ рд╕рд╛рд▓ рдмрд╛рдж, рдореИрдВрдиреЗ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рди рдХреЗрд╡рд▓ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдмрд▓реНрдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ ASP.NET рдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг


рдЕрд╕рдорд░реНрдерд┐рдд рд╕рдВрдЧреНрд░рд╣рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


Microsoft рдЙрддреНрдкрд╛рдж рдХрд╛рдлреА рдорд╣рдВрдЧреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдПрдХ рддрдереНрдп рд╣реИ, рдФрд░ рдореБрдлреНрдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХрдИ рд╕реАрдорд╛рдПрдБ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдЬреИрд╕реЗ рдХрд┐ MySQL рдпрд╛ PostgreSQL рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рджреВрд╕рд░реА рдУрд░, рдЖрдк рд╡рд┐рддрд░рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреА-рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдЦрд░реАрджреА рдЧрдИ рдЕрдиреНрдп рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд▓рд╛рдЗрд╕реЗрдВрд╕ рд╣реЛрдВред

рдХрд╕реНрдЯрдо рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреЗрдмрд▓ рд╕реНрдХреАрдорд╛


рдпрд╣ рдХрд╛рд░рдг рд╕рдмрд╕реЗ рдЖрдо рд╣реИред

рдорд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЕрдЪреНрдЫреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрд╡реЗрджрди рдЬрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдЙрддрдирд╛ рд╣реА рдЧреИрд░-рдорд╛рдирдХ рд╕рдорд╛рдзрд╛рди рдЗрд╕рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг:
рд╕рд╛рдЗрдЯ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рддреНрд░ рдмрдВрдж рдХрд░рдиреЗ (рдЬрдмрд░рди рд▓реЙрдЧрдЖрдЙрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред SQL рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рддреНрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рджрд╕реНрдпрддрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

ASP.NET рдореЗрдВ рд╕рддреНрд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХреМрди рдФрд░ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ


SessionStateModule рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд░рд╛рдЬреНрдп (рд╕рддреНрд░) рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрдВрдбрд▓рд░ рд╣реИред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ http-рдореЙрдбреНрдпреВрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

SessionStateModule рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рддреНрд░ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдЙрд╕рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рдкреНрд░рджрд╛рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рд╕рддреНрд░ рдкреНрд░рджрд╛рддрд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рд╕рддреНрд░ рдкреНрд░рджрд╛рддрд╛ рдХреЛ SessionStateStoreProviderBase рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ SessionStateModule рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕рддреНрд░ рдпреЛрдЬрдирд╛


ASP.NET (рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп) рдореЗрдВ рд╕рддреНрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рд┐рдВрдЧ рдкреНрд░рджрд╛рддрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдкрд░реЗрдЦрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИред



рдЕрдВрдЬреАрд░ред рд╕рддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХреНрд░рдо

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, SessionStateModule рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рд╕рддреНрд░ рдореЛрдб (ASP.NET WebForms) рдпрд╛ рдирд┐рдпрдВрддреНрд░рдХ (ASP.NET WebVC) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рд╣реИ:
<% @ рдкреГрд╖реНрда EnableSessionState = "рд╕рддреНрдп | рдЧрд▓рдд | ReadOnly"%>
(рдпрд╛ ASP.NET MVC рдХреЗ рд▓рд┐рдП SessionState рд╡рд┐рд╢реЗрд╖рддрд╛)

рд╕рддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рд░реАрдб рдУрдирд▓реА рдореЛрдб ( рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП) рдореЗрдВ рд╣реЛрдЧрд╛, рдЬреЛ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, SessionStateModule рдореЙрдбреНрдпреВрд▓ рдЕрдирдиреНрдп рдкрд╣реБрдВрдЪ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рддреНрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИред рд▓реЙрдХ рдХреЗрд╡рд▓ рдХреНрд╡реЗрд░реА рдХреЗ рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд╕рддреНрд░ рддрд╛рд▓реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?


ASP.NET рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ, рдФрд░ рдЕрдЬрд╛рдХреНрд╕ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдБ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВред рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХрдИ рдзрд╛рдЧреЗ рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рддреНрд░ рдореЗрдВ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдВрдЧреЗ, рддрд╛рдХрд┐ рдЯрдХрд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧреНрд░рд╣реАрдд рдорд╛рдиреЛрдВ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдпрд╛ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдорд╛рдиреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рддрд╛рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрдИ рдереНрд░реЗрдбреНрд╕ рд╕реЗ рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рддреНрд░ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдкрд░ рд╣реА рддрд╛рд▓реЗ рд▓рдЧрддреЗ рд╣реИрдВред

рдереНрд░реЗрдб рдЬреЛ рд╕рддреНрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдБрдЪ рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдЕрдирдиреНрдп рдкрд╣реБрдБрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд╢реЗрд╖ рдереНрд░реЗрдбреНрд╕ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рдореБрдХреНрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╛ рдЬрдм рддрдХ рдереЛрдбрд╝реЗ рд╕рдордп рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ

рд╣рдо рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдмрд┐рдирд╛ рд░реЛрдХ-рдЯреЛрдХ рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдорд╛рдирдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рдзрд╛рдЧреЗ рдХреЗ рдмреАрдЪ рдХреЛрдИ рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдпрд╛ рд╡реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЬрдиреНрдо рдирд╣реАрдВ рджреЗрдВрдЧреЗред

рд╕рддреНрд░ рдкреНрд░рджрд╛рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╕рддреНрд░ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдирд╛


рдореИрдВ рд╕рддреНрд░ рд░рд╛рдЬреНрдп рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛:



рдпрд╣ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдЖрдИрдб рдлрд╝реАрд▓реНрдб рдХреЛ рднреА рдЬреЛрдбрд╝рд╛, рд╕рддреНрд░ рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рд╕реЗ рд▓реЙрдЧрдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред

sessionidрдЕрджреНрд╡рд┐рддреАрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрдмрд▓, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реИрдЯрд┐рди рд╡рд░реНрдгрдорд╛рд▓рд╛ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЕрдХреНрд╖рд░реЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдпрд╣ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд▓рдВрдмрд╛рдИ рдореЗрдВ рдЕрдзрд┐рдХрддрдо 24 рд╡рд░реНрдгреЛрдВ рддрдХ рдкрд╣реБрдБрдЪрддреА рд╣реИред
рдмрдирд╛рдпрд╛ рдЧрдпрд╛рд╕рддреНрд░ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рдордпред
рд╕рдордп-рд╕реАрдорд╛ рд╕рдорд╛рдкреНрддрд╡рд╣ рд╕рдордп рдЬрдм рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИред
LookDateрд╡рд╣ рдХреНрд╖рдг рдЬрдм рд╕рддреНрд░ рдЕрд╡рд░реБрджреНрдз рдерд╛ред
LookIdрд╕рддреНрд░ рд▓реЙрдХ рдирдВрдмрд░ред
рджреЗрдЦрд╛рдХреНрдпрд╛ рдкрд▓ рдореЗрдВ рддрд╛рд▓рд╛ рд╣реИ?
ItemContentрдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд░реВрдк рдореЗрдВ рд╕рддреНрд░ рд╕рд╛рдордЧреНрд░реАред
рдкреНрд░рдпреЛрдХреНрддрд╛-рдЖрдИрдбреАрд╕рддреНрд░ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЖрдИрдбреА (рдореЗрд░рд╛ рдЕрддрд┐рдерд┐ рдЖрдИрдбреА = 1 рд╣реИ)


рдЙрдкрд░реЛрдХреНрдд рддрд╛рд▓рд┐рдХрд╛ (SQL рд╕рд░реНрд╡рд░) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП SQL рдХреНрд╡реЗрд░реА:
CREATE TABLE [dbo].[Sessions] ( [SessionId] varchar(24) COLLATE Cyrillic_General_CI_AS NOT NULL, [Created] smalldatetime NOT NULL, [Expires] smalldatetime NOT NULL, [LockDate] smalldatetime NOT NULL, [LockId] int NOT NULL, [Locked] bit CONSTRAINT [DF_Sessions_Locked] DEFAULT 0 NOT NULL, [ItemContent] varbinary(max) NULL, [UserId] int NOT NULL, CONSTRAINT [PK_Sessions] PRIMARY KEY CLUSTERED ([SessionId]) ) ON [PRIMARY] GO 


рдПрдХ EntityFramework рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдмрдирд╛рдирд╛


рдореИрдВ рд╕реНрд╡рдпрдВ рдХреЛ рдПрд╕рдХреНрдпреВрдПрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рд╕рдордп рдХреА рдмрдЪрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ ADO.NET EntityFramework рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ SQL рдХреНрд╡реЗрд░реА рдмрдирд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЛрдб рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░реВрдБрдЧрд╛ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП ADO.NET рдЗрдХрд╛рдИ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рдЕрдВрдЬреАрд░ред рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП ADO.NET рдЗрдХрд╛рдИ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХрд╛ рдЪрдпрди

рдореИрдВрдиреЗ рдмрдирд╛рдИ рдЧрдИ рдЗрдХрд╛рдИ рдХрд╛ рдирд╛рдо DbSession рд░рдЦрд╛ рд╣реИ ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд░реНрдЧ рдФрд░ рд╕рдВрджрд░реНрдн рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдПрдХ рд╕рдВрджрд░реНрдн рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред


рдЕрдВрдЬреАрд░ред рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рдкреИрдЯрд░реНрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдиреВ рдЪрдпрди

рдореБрдЭреЗ DbContext API рдкрд╕рдВрдж рд╣реИ , рдЬреЛ рдХрд┐ EntityFramework рдХреЗ 4.1 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдЪреБрдиреВрдВрдЧрд╛ ред


рдЕрдВрдЬреАрд░ред рдХреЛрдб рдЬрдирд░реЗрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ DbContext рдЪреБрдирдирд╛

рд╣реЛ рдЧрдпрд╛, рдЕрдм рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИ рдЬрд┐рд╕реЗ рдХреЙрдордирдЯрд┐рдЯреАрдЬ рдФрд░ рдПрдХ рдбреАрдмреАрдПрд╕ рд╕рддреНрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рджрд╛рддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ SessionStateStoreProviderBase рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдЧрд╛ред

 using QueryHunter.WebDomain.Layouts.Session; public class SessionStateProvider : SessionStateStoreProviderBase { // ... } 


рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд▓реЗрдЦрди рдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЗрд╣рддрд░ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ:

 /// <summary> ///   . /// </summary> public class SessionStateProvider : SessionStateStoreProviderBase { CommonEntities _dataContext; int _timeout; /// <summary> ///  ,  ,  ... /// </summary> public override void Initialize(string name, NameValueCollection config) { if (config == null) throw new ArgumentNullException("config"); base.Initialize(name, config); var applicationName = System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath; var configuration = WebConfigurationManager.OpenWebConfiguration(applicationName); var configSection = (SessionStateSection)configuration.GetSection("system.web/sessionState"); _timeout = (int)configSection.Timeout.TotalMinutes; // ,      EntityFramework      . //    Dependency Injection       . _dataContext = new CommonEntities(); } public override void Dispose() { _dataContext.Dispose(); } /// <summary> ///     "  "   . /// </summary> public override SessionStateStoreData GetItem(HttpContext context, string id, out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actions) { return GetSessionItem(context, id, false, out locked, out lockAge, out lockId, out actions); } /// <summary> ///         . /// </summary> public override SessionStateStoreData GetItemExclusive(HttpContext context, string id, out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actions) { return GetSessionItem(context, id, true, out locked, out lockAge, out lockId, out actions); } /// <summary> ///           . ///   GetItem,   GetItemExclusive. /// </summary> private SessionStateStoreData GetSessionItem(HttpContext context, string id, bool exclusive, out bool locked, out TimeSpan lockAge, out object lockId, out SessionStateActions actions) { locked = false; lockAge = new TimeSpan(); lockId = null; actions = 0; var sessionItem = _dataContext.DbSessions.Find(id); //    if (sessionItem == null) return null; //  ,   if (sessionItem.Locked) { locked = true; lockAge = DateTime.UtcNow - sessionItem.LockDate; lockId = sessionItem.LockId; return null; } //  ,    if (DateTime.UtcNow > sessionItem.Expires) { _dataContext.Entry(sessionItem).State = EntityState.Deleted; _dataContext.SaveChanges(); return null; } //  ,   . if (exclusive) { sessionItem.LockId += 1; sessionItem.Locked = true; sessionItem.LockDate = DateTime.UtcNow; _dataContext.SaveChanges(); } locked = exclusive; lockAge = DateTime.UtcNow - sessionItem.LockDate; lockId = sessionItem.LockId; var data = (sessionItem.ItemContent == null) ? CreateNewStoreData(context, _timeout) : Deserialize(context, sessionItem.ItemContent, _timeout); data.Items["UserId"] = sessionItem.UserId; return data; } /// <summary> ///   ,     . /// </summary> public override void ReleaseItemExclusive(HttpContext context, string id, object lockId) { var sessionItem = _dataContext.DbSessions.Find(id); if (sessionItem.LockId != (int)lockId) return; sessionItem.Locked = false; sessionItem.Expires = DateTime.UtcNow.AddMinutes(_timeout); _dataContext.SaveChanges(); } /// <summary> ///      . /// </summary> public override void SetAndReleaseItemExclusive(HttpContext context, string id, SessionStateStoreData item, object lockId, bool newItem) { var intLockId = lockId == null ? 0 : (int)lockId; var userId = (int)item.Items["UserId"]; var data = ((SessionStateItemCollection)item.Items); data.Remove("UserId"); //   var itemContent = Serialize(data); //    ,      . if (newItem) { var session = new DbSession { SessionId = id, UserId = userId, Created = DateTime.UtcNow, Expires = DateTime.UtcNow.AddMinutes(_timeout), LockDate = DateTime.UtcNow, Locked = false, ItemContent = itemContent, LockId = 0, }; _dataContext.DbSessions.Add(session); _dataContext.SaveChanges(); return; } //    ,     , //       . var state = _dataContext.DbSessions.Find(id); if (state.LockId == (int)lockId) { state.UserId = userId; state.ItemContent = itemContent; state.Expires = DateTime.UtcNow.AddMinutes(_timeout); state.Locked = false; _dataContext.SaveChanges(); } } /// <summary> ///     . /// </summary> public override void RemoveItem(HttpContext context, string id, object lockId, SessionStateStoreData item) { var state = _dataContext.DbSessions.Find(id); if (state.LockId != (int)lockId) return; _dataContext.Entry(state).State = EntityState.Deleted; _dataContext.SaveChanges(); } /// <summary> ///    . /// </summary> public override void ResetItemTimeout(HttpContext context, string id) { var sessionItem = _dataContext.DbSessions.Find(id); if (sessionItem == null) return; sessionItem.Expires = DateTime.UtcNow.AddMinutes(_timeout); _dataContext.SaveChanges(); } /// <summary> ///   ,          . ///        ,   . /// </summary> public override SessionStateStoreData CreateNewStoreData(HttpContext context, int timeout) { var data = new SessionStateStoreData(new SessionStateItemCollection(), SessionStateUtility.GetSessionStaticObjects(context), timeout); data.Items["UserId"] = 1; return data; } /// <summary> ///         . /// </summary> public override void CreateUninitializedItem(HttpContext context, string id, int timeout) { var session = new DbSession { SessionId = id, UserId = 1, Created = DateTime.UtcNow, Expires = DateTime.UtcNow.AddMinutes(timeout), LockDate = DateTime.UtcNow, Locked = false, ItemContent = null, LockId = 0, }; _dataContext.DbSessions.Add(session); _dataContext.SaveChanges(); } #region      public override bool SetItemExpireCallback(SessionStateItemExpireCallback expireCallback) { return false; } public override void EndRequest(HttpContext context) { } public override void InitializeRequest(HttpContext context) { } #endregion #region      private byte[] Serialize(SessionStateItemCollection items) { var ms = new MemoryStream(); var writer = new BinaryWriter(ms); if (items != null) items.Serialize(writer); writer.Close(); return ms.ToArray(); } private SessionStateStoreData Deserialize(HttpContext context, Byte[] serializedItems, int timeout) { var ms = new MemoryStream(serializedItems); var sessionItems = new SessionStateItemCollection(); if (ms.Length > 0) { var reader = new BinaryReader(ms); sessionItems = SessionStateItemCollection.Deserialize(reader); } return new SessionStateStoreData(sessionItems, SessionStateUtility.GetSessionStaticObjects(context), timeout); } #endregion } 


рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧ


рд╣рдордиреЗ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб рдХреЛ <system.web> рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:



рдЙрд╕реА рд╕рдордп, CustomSessionStateProvider.Infrastructure.SessionProvider.SessionStateProvider рд╣рдорд╛рд░реЗ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдкреВрд░рд╛ рдирд╛рдо рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд╛рдо рд╕реНрдерд╛рди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдЖрдк рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рдкрд░реАрдХреНрд╖рдг рдкреНрд░рджрд╛рддрд╛


рд╕рддреНрд░реЛрдВ рдХреЗ рдХрд╛рдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ ASP.NET MVC 3 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдпрд╛рд░ рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рд╣реЛрдордХрдВрдЯреНрд░реЛрд▓рд░ рдмрдирд╛рдпрд╛ рдФрд░ рдПрдХ рд╕реВрдЪреА рдФрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рд╡рд╕реНрддреБ рд╕рд╣рд┐рдд рд╕рддреНрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред

 namespace CustomSessionStateProvider.Controllers { public class HomeController : Controller { // // GET: /Home/ public ActionResult Index() { return View(); } //   public ActionResult SetToSession() { Session["Foo"] = new List<int>() {1, 2, 3, 4, 5}; Session["Boo"] = new SomeClass(50); return View(); } //    public ActionResult ViewSession() { return View(); } } //   . [Serializable] public class SomeClass { readonly int _value; public SomeClass(int value) { _value = value; } public override string ToString() { return "value = " + _value.ToString(); } } } 


рдореИрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдирд╣реАрдВ рджреВрдВрдЧрд╛, рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдЙрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреВрдВрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдорд┐рд▓рд╛, рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред



рдирд┐рд╖реНрдХрд░реНрд╖


рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЛ рдорд╛рдирдХреЛрдВ рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдбрд░ рдирд╣реАрдВ рд╣реИ, рдЕрдХреНрд╕рд░ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рдФрд░ рд▓рдЪреАрд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЗ рдЦреБрдж рдХреЗ ASP.NET рд╕рджрд╕реНрдпрддрд╛ рддрдВрддреНрд░ рдХреЛ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджреЗрдЦреВрдВрдЧрд╛ред
рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рд╣реИ!

PS рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ: CustomSessionStateStoreProvider.zip

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ


рдХрд┐рд░рд┐рд▓ рдореБрдЬрд╝рдХреЛрд╡ ( kmuzykov ) рджреНрд╡рд╛рд░рд╛ рд░реЗрдбрд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд╕рддреНрд░ рд╕реНрдЯреЛрд░ рдкреНрд░рджрд╛рддрд╛ ASP.NET рдХреЛ рд▓рд┐рдЦрдирд╛
рд╕рддреНрд░ рд░рд╛рдЬреНрдп рд╕реНрдЯреЛрд░ рдкреНрд░рджрд╛рддрд╛ (рдПрдордПрд╕рдбреАрдПрди) рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕реЗрд╢рди рд╕реНрдЯреЗрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдкреНрд░реЛрд╡рд╛рдЗрдбрд░ (msdn) рдЙрджрд╛рд╣рд░рдг
рд╣реИрд░реА Kimpel рджреНрд╡рд╛рд░рд╛ MySQL рдкреНрд░рджрд╛рддрд╛

Source: https://habr.com/ru/post/In141056/


All Articles