asp.net——session

20055 ワード

1.グローバル変数とローカル変数の違いについて説明します
Webページを新規作成し、labelコントロールをドラッグします.idはLabel 1です.Buttonコントロールで、idはButton 1です.
 1     private int i = 0;//        new       IhttpHandlder    “  1”       ,    GC ,          。

 2 

 3     private static int j = 0;//              

 4     protected void Page_Load(object sender, EventArgs e)

 5     {

 6 

 7     }

 8     protected void Button1_Click(object sender, EventArgs e)

 9     {

10         //i++;

11         //Label1.Text = i.ToString();

12 

13         j++;

14         Label1.Text = j.ToString();

15     }

2.Cookieは多くの情報を格納することができず、大量のデータを保存したい場合は、GuidをCookieに保存し、サーバにGuidをkeyとし、複雑なデータビットValueのグローバルDictionaryを構築することができます.Staticフィールドは異なるユーザに対しても1部しかないため,staticでマルチユーザ共有データを実現する.
次にsessionの原理を説明します.
App_コードに新しいクラスを作成します.cs、コードは以下の通りです.
public class MySession

{

    private static IDictionary<string, IDictionary<string, object>> data = new Dictionary<string, IDictionary<string, object>>();

   public static IDictionary<string,object>  GetSession(string sessionId)

   {

       if(data.ContainsKey(sessionId))

       {

           return data[sessionId];

       }

       else

       {

           IDictionary<string, object> session = new Dictionary<string, object>();

           data[sessionId]=session;

           return session;

       }

   }

Webページを新規作成し、2つのButtonコントロール、1つのLabelコントロールをドラッグし、Session値を設定し、Sessionを読み込むコードは次のとおりです.
 1  protected void Page_Load(object sender, EventArgs e)

 2     {

 3         

 4         if (Request.Cookies["mySessionId"] == null)

 5         {

 6             string sessionId = Guid.NewGuid().ToString();

 7             Response.SetCookie(new HttpCookie("mySessionId", sessionId));

 8         }

 9 

10     }

11     protected void Button1_Click(object sender, EventArgs e)//  Session    

12     {

13         string sessionId=Request.Cookies["mysessionId"].Value;

14          IDictionary<string,object> session= MySession.GetSession(sessionId);

15         session["      1"] = "  ";

16         session["      2"] = "  ";

17     }

18     protected void Button2_Click(object sender, EventArgs e)//  Session    

19     {

20         string sessionId = Request.Cookies["mySessionId"].Value;

21         IDictionary<string, object> session = MySession.GetSession(sessionId);

22         Label1.Text = Convert.ToString(session["      1"]) + Convert.ToString(session["      2"]); ;

23     }

3.実はAsp.NetにはすでにSessionメカニズムが内蔵されており、上記の例をasp.NetSession書き換え:Webページを新規作成し、2つのButtonコントロールと1つのLabelコントロールをドラッグし、2つのボタンのダブルクリックイベントを追加し、次のコードを書きます.
 1    protected void Page_Load(object sender, EventArgs e)

 2     {

 3 

 4     }

 5     protected void Button1_Click(object sender, EventArgs e)

 6     {

 7         Session["name"] = "  ";

 8         Session["data"] = DateTime.Now.ToString();

 9     }

10     protected void Button2_Click(object sender, EventArgs e)

11     {

12         Label1.Text = Convert.ToString(Session["name"]) + Convert.ToString(Session["data"]);

13     }

SessionメカニズムはHttpプロトコルで規定するものではなくaspであることがわかる.Netが実現したのは,現在php,jspなどのほとんどのサービス側技術がsessionを実現しており,原理はそれほど悪くない.
4.Sessionにオブジェクトをあまり置かないでください.Sessionはタイムアウトして破棄するメカニズムがあります.投稿(サーバーがブラウザが開いているかどうか、いつ閉じるか分からない).Cookieはクライアントが存在し、Sessionはサーバ側が存在し、現在のクライアントに関連するデータを保存することを目的としています.あまり大きなデータを置くことはできません.データはobjectです.ユーザーが変更したくないデータはセッションに入れます.
5.session版自増
Webページを新規作成し、Buttonコントロールをドラッグ&ドロップし、そのコントロールのダブルクリックイベントを追加します.コードは次のとおりです.
 1    protected void Page_Load(object sender, EventArgs e)

 2     {

 3         //       page_load    ,         Session  value     

 4 

 5         if (!IsPostBack)

 6         {//          

 7             Session["value"] = "0";

 8         }

 9     }

10     protected void Button1_Click(object sender, EventArgs e)

11     {

12         int v = Convert.ToInt32(Session["value"]);

13         v++;

14         Session["value"] = v;

15         TextBox1.Text = Convert.ToString(Session["value"]);

16     }

6.ケース:sessionで検証コードメカニズムを実現
一般的なハンドラページを新規作成し、次のコードを追加します.
 1 context.Response.ContentType = "image/JPEG";

 2          using (System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(100, 50))

 3           {

 4               using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap))

 5               {

 6                   //g.DrawString("    ", new System.Drawing.Font("  ", 20), System.Drawing.Brushes.Green, new System.Drawing.PointF(0, 0));

 7                   //g.DrawEllipse(System.Drawing.Pens.Red,new System.Drawing.Rectangle(10,10,10,10));

 8                   //System.Drawing.Pen pen = (System.Drawing.Pen)System.Drawing.Pens.Red.Clone();

 9                   //pen.Width = 3;

10                   //g.DrawEllipse(pen,new System.Drawing.Rectangle(20,20,10,20));

11                   Random rand = new Random();

12                   int code = rand.Next(1000,9999);//       

13                   string strCode = code.ToString();

14                   HttpContext.Current.Session["Code"] = strCode;//         session 

15                   g.DrawString(strCode,new System.Drawing.Font ("  ",30),System.Drawing.Brushes.Green,new System.Drawing.PointF(0,0));//       

16                   bitmap.Save(context.Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg);//                 。

17               } 

18           }

Webページを新規作成し、ButtonコントロールとTextBoxコントロールをドラッグ&ドロップし、Webページのソースページに次のコードを追加します.
1 <div>

2        <img src="YZMr.ashx" onclick="this.src='YZMr.ashx?aaa='+new Date()+''" />

3 

4             .......

5 </div>

Buttonをダブルクリックして、次のコードを追加します.
 1         protected void Button1_Click(object sender, EventArgs e)

 2     {

 3         string CorretNum = Convert.ToString(Session["Code"]);

 4         if (TextBox1.Text == CorretNum)

 5         {

 6             Response.Write("    ");

 7         }

 8         else

 9         {

10             Response.Write("    ");

11         }

12 

13     }

以上がセッションの知識です.