asp.net——session
20055 ワード
1.グローバル変数とローカル変数の違いについて説明します
Webページを新規作成し、labelコントロールをドラッグします.idはLabel 1です.Buttonコントロールで、idはButton 1です.
2.Cookieは多くの情報を格納することができず、大量のデータを保存したい場合は、GuidをCookieに保存し、サーバにGuidをkeyとし、複雑なデータビットValueのグローバルDictionaryを構築することができます.Staticフィールドは異なるユーザに対しても1部しかないため,staticでマルチユーザ共有データを実現する.
次にsessionの原理を説明します.
App_コードに新しいクラスを作成します.cs、コードは以下の通りです.
Webページを新規作成し、2つのButtonコントロール、1つのLabelコントロールをドラッグし、Session値を設定し、Sessionを読み込むコードは次のとおりです.
3.実はAsp.NetにはすでにSessionメカニズムが内蔵されており、上記の例をasp.NetSession書き換え:Webページを新規作成し、2つのButtonコントロールと1つのLabelコントロールをドラッグし、2つのボタンのダブルクリックイベントを追加し、次のコードを書きます.
SessionメカニズムはHttpプロトコルで規定するものではなくaspであることがわかる.Netが実現したのは,現在php,jspなどのほとんどのサービス側技術がsessionを実現しており,原理はそれほど悪くない.
4.Sessionにオブジェクトをあまり置かないでください.Sessionはタイムアウトして破棄するメカニズムがあります.投稿(サーバーがブラウザが開いているかどうか、いつ閉じるか分からない).Cookieはクライアントが存在し、Sessionはサーバ側が存在し、現在のクライアントに関連するデータを保存することを目的としています.あまり大きなデータを置くことはできません.データはobjectです.ユーザーが変更したくないデータはセッションに入れます.
5.session版自増
Webページを新規作成し、Buttonコントロールをドラッグ&ドロップし、そのコントロールのダブルクリックイベントを追加します.コードは次のとおりです.
6.ケース:sessionで検証コードメカニズムを実現
一般的なハンドラページを新規作成し、次のコードを追加します.
Webページを新規作成し、ButtonコントロールとTextBoxコントロールをドラッグ&ドロップし、Webページのソースページに次のコードを追加します.
Buttonをダブルクリックして、次のコードを追加します.
以上がセッションの知識です.
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 }
以上がセッションの知識です.