C#: atestat și pregătire ONTI

C#: validare pe server și sesiune în Web Forms

Validează datele pe server într-o pagină C# Web Forms și păstrează un rezultat în sesiune. Distinge sesiunea de autentificare și de salvarea permanentă.

O sesiune poate păstra temporar date între cererile aceluiași browser, dar nu este o bază de date și nu dovedește identitatea unei persoane. Exemplul reține titlul unui proiect după o validare pe server. La o nouă cerere îl afișează din sesiune, iar un buton separat îl elimină.

Cum lucrezi cu exemplul

Arhiva conține un Web Site ASP.NET Web Forms pentru .NET Framework 4.8: Default.aspx, Web.config și clasa din App_Code. Deschide ca Web Site în Visual Studio pe Windows și rulează local cu IIS Express. Nu este un proiect ASP.NET Core.

Descarcă sursele și instrucțiunile.

Ideea și pașii de implementare

Pagina creează un TextBox, un RequiredFieldValidator și două butoane. Validarea este grupată sub numele entry. Handler-ul Save apelează Validate și verifică IsValid înainte de a folosi textul. Verificăm suplimentar după Trim și limita de 80 de caractere. Butonul Șterge nu declanșează validarea câmpului.

Session["ProjectTitle"] conține numai un text simplu. La afișare folosim HtmlEncode. Exemplul presupune o aplicație locală ASP.NET Web Forms cu sesiunea activă. Datele se pot pierde la expirare sau repornirea procesului, în funcție de modul de stocare configurat.

Exemplu și rezultat așteptat

Introdu Biblioteca și salvează: apare Salvat in sesiune: Biblioteca. O cerere nouă din aceeași sesiune îl poate reciti. Apasă Șterge: apare Nicio valoare salvata. Trimiterea unui câmp gol nu înlocuiește titlul valid deja păstrat.

Schemă pentru lecția 47: Text trimis; Validate + Trim + limită; Session[ProjectTitle]; Cerere nouă → recitire.Text trimis → Validate + Trim + limită → Session[ProjectTitle] → Cerere nouă → recitire.Mărește schema ↗

Codul complet

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
public class DemoPage : Page {
    TextBox input;Literal output;
    protected override void OnInit(EventArgs e) {
        base.OnInit(e);var form=new HtmlForm {ID="mainForm"};
        input=new TextBox {ID="titleInput",MaxLength=80};output=new Literal {ID="result"};
        var required=new RequiredFieldValidator {ID="required",ControlToValidate="titleInput",ErrorMessage="Titlu obligatoriu.",
            ValidationGroup="entry",EnableClientScript=false,Display=ValidatorDisplay.Dynamic};
        var save=new Button {ID="save",Text="Salveaza",ValidationGroup="entry"};
        var clear=new Button {ID="clear",Text="Sterge",CausesValidation=false};
        save.Click += Save;clear.Click += (s,args) => {Session.Remove("ProjectTitle");ShowSaved();};
        form.Controls.Add(input);form.Controls.Add(required);form.Controls.Add(save);form.Controls.Add(clear);form.Controls.Add(output);
        Controls.Add(form);
    }
    protected override void OnLoad(EventArgs e) {base.OnLoad(e);ShowSaved();}
    void Save(object sender,EventArgs e) {
        Validate("entry");string title=input.Text.Trim();
        if(!IsValid || title.Length==0 || title.Length>80) {output.Text="Titlu invalid; valoarea veche este pastrata.";return;}
        Session["ProjectTitle"]=title;ShowSaved();
    }
    void ShowSaved() {string title=Session["ProjectTitle"] as string;
        output.Text=title==null ? "Nicio valoare salvata." : "Salvat in sesiune: " + HttpUtility.HtmlEncode(title);}
}

Greșeli și limite

Nu considera existența unei variabile de sesiune drept autentificare. Nu păstra parole în sesiune pentru a le reutiliza. Nu folosi sesiunea ca unic depozit pentru proiectul predat. Nu te baza numai pe validarea JavaScript: cererea poate fi trimisă și fără browserul obișnuit.

Exersează

Testează text valid, text cu spații și text prea lung. Verifică faptul că o salvare invalidă nu distruge valoarea precedentă. Deschide un profil de browser separat și observă că nu trebuie să primească automat aceeași sesiune. Descrie ce date ai muta în baza de date pentru păstrare permanentă.

Continuă parcursul

Parcursul complet de 50 de lecții

Bazele C#

Lecția precedentă: C#: primul formular web cu ASP.NET Web Forms

Lecția următoare: C#: documentația și demonstrația proiectului de atestat.

Referință: documentația Microsoft.

Întrebări frecvente

Sesiunea autentifică utilizatorul?

Nu prin simpla ei existență. Autentificarea este un mecanism separat.

Datele din sesiune sunt permanente?

Nu. Pot expira sau se pot pierde la repornire, în funcție de configurare.

De ce validez și în handler?

Pentru că decizia de acceptare a datelor trebuie luată pe server înainte de modificarea stării.

Un pas mai departe

Autentifică-te pentru a păstra progresul în cont.

Exersează cu o problemă →