Cookie/Session

1  Cookie的設置和獲取:html

     默認瀏覽器關閉,cookie就消失,設置有效期,就到期後才消失
            cookie與瀏覽器相關,各類瀏覽器、同一瀏覽器窗口、小號模式,互不影響,各有一套cookie
            cookie中不能存太多數據、不能存銘感的不能修改password的數據
            cookie有可能提早消失,瀏覽器能夠進行瘦身,或用戶手動清楚cookieweb

public class cookie1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //設置cookie
            HttpCookie cookie = new HttpCookie("test");
            //cookie.Value = "rupeng.com";
            cookie.Value = context.Request.UserAgent;
             //設置有效期,若是沒有,則瀏覽器關閉就消失
            cookie.Expires = DateTime.Now.AddSeconds(10);
            context.Response.SetCookie(cookie);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
cookie的設置
 public class cookie2 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //獲取cookie
            HttpCookie cookie = context.Request.Cookies["test"];
            context.Response.Write(cookie==null?"沒有這個cookie":cookie.Value);
            //修改cookie的值
            //if(cookie!=null)
            //{
            //    cookie.Value = "Core就是必須學";
            //    context.Response.SetCookie(cookie);
            //}
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
cookie的獲取

 2  Cookie實現記住登陸用戶名:sql

    當用戶進入登陸界面時,若是cookie中記住了用戶名 就自動填充用戶名,不然不填數據庫

    當用戶登陸時,若是登陸成功 就在cookie中記住用戶名,不然跳轉登陸界面瀏覽器

    

public class memoryUsername : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string login = context.Request["login"];
            if(string.IsNullOrWhiteSpace(login)) //展現
            {
                string html = CommonHelper.GetHtmlFromVirtualPath(context, "~/Day4/memoryUsername.html");
                //展現時,先從cookie中查看是否有username,若是有就自動顯示出用戶名,若是沒有就不顯示
                HttpCookie cookieUserName = context.Request.Cookies["LastUserName"];
                if (cookieUserName != null)
                {
                    string cookieValue = cookieUserName.Value;
                    html = html.Replace("@username", cookieValue);
                    context.Response.Write(html);
                }
                else 
                {
                    html = html.Replace("@username", "");
                    context.Response.Write(html);
                }
            }
            else //登陸
            {
                //登陸時,若是登陸成功,無論有沒有這個cookie,都從新設置cookie
                string username = context.Request["username"];
                string password = context.Request["password"];
                if (username == "admin" && password == "123") //登陸成功
                {
                    HttpCookie cookieUserName = new HttpCookie("LastUserName");
                    cookieUserName.Value = username;
                    cookieUserName.Expires = DateTime.Now.AddDays(7);
                    context.Response.SetCookie(cookieUserName);
                    context.Response.Write("登陸成功");
                }
                else
                {
                    context.Response.Redirect("memoryUsername.ashx");
                }
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
cookie實現登陸時記住用戶名
<body>
    <form action="memoryUsername.ashx" method="post">
        用戶名:<input type="text" name="username" value="@username" /><br />
        密碼:<input type="password" name="password" /><br />
        <input type="submit" name="login" value="登陸" /><br />
    </form>
</body>
登陸表單

 3  Cookie中的Path路徑:安全

    cookie.Path 若是不設置,默認是\,表示當前域名下的全部頁面均可以讀取這個cookie,www.rupeng.com和www.rupeng.cn是2個不一樣的域名,cookie不共用。服務器

    cookie.Path="/Day4/cookiePath1.ashx" 設置path,表示只有這有這個‘/Day4/cookiePath1.ashx’頁面,才能夠讀取這個cookie,不然不能讀取不到這個cookie。cookie

    cookie.Domain="rupeng.com" 設置cookie的域名,則不論是www.rupeng.com仍是bbs.rupeng.com均可以讀取到這個cookie。cookie與域名有關。session

 public class cookiePath1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            HttpCookie cookieRead = context.Request.Cookies["path"];
            context.Response.Write(cookieRead == null ? "沒有這個cookie" : cookieRead.Value+"||"+cookieRead.Path);
            //設置cookie
            HttpCookie cookie = new HttpCookie("path");
            cookie.Value = "rupeng.com";
            cookie.Expires = DateTime.Now.AddDays(1);
            cookie.Path = "/Day4/cookiePath1.ashx"; //只有cookiePath1.ashx才能訪問這個cookie,由於這個cookie設置在了這個頁面
            //cookie.Domain = ".rupeng.com"; //把這個cookie設置在了這個域名  www.rupeng.com和bbs.rupeng.com是同一個域名下的2個不一樣網站,其cookie若是不設置,是不共用的
            context.Response.SetCookie(cookie);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
設置cookie的path
public class cookiePath2 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //讀取cookie
            HttpCookie cookie = context.Request.Cookies["path"];
            context.Response.Write(cookie == null ? "沒有cookie" : cookie.Value + "||" + cookie.Path);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
讀取cookie

 4  Session的寫入和讀取,以及判斷登陸用戶是否有權限asp.net

    session存在服務器,用一個沒法被篡改的「身份證號」的sessionId惟一標示。

    session必須實現IRequiresSessionState接口,可是會影響性能。

    cookie只能存字符串,session幾乎能夠存任意類型。

    session與cookie相關,默認也是瀏覽器關閉就消失,能夠經過<sessionState timeout="20" />在web.config中設置超時時間20分鐘。(超時沒效果)

public class session1 : IHttpHandler,IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //寫入session
            context.Session["session1"] = "ruepng.com";
            context.Session["session2"] = 888;
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
session寫入
 public class session2 : IHttpHandler, IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            object session1 = context.Session["session1"]; //string類型
            object session2 = context.Session["session2"]; //int類型
            context.Response.Write(session1 == null ? "沒有這個session" : session1.ToString());
            context.Response.Write(session2 == null ? "沒有這個session2" :session2);
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
session讀取

判斷登陸用戶是否有權限

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string login = context.Request["login"];
            string html = CommonHelper.GetHtmlFromVirtualPath(context, "~/Day4/sessionUserName.html");
            #region 展現
            if (string.IsNullOrWhiteSpace(login)) //展現
            {
                HttpCookie cookieUserName = context.Request.Cookies["LastUserName"];
                if (cookieUserName != null)
                {
                    html = html.Replace("@username", cookieUserName.Value);
                    context.Response.Write(html);
                }
                else
                {
                    html = html.Replace("@username", "");
                    context.Response.Write(html);
                }
            } 
            #endregion
            #region 登陸
            else //登陸
            {
                string username = context.Request["username"];
                string password = context.Request["password"];
                if (password == "123") //爲了方便後面的權限判斷 username是否爲admin,因此這裏沒註明
                {
                    //寫入cookie 方便下次登陸時自動填充
                    HttpCookie cookie = new HttpCookie("LastUserName");
                    cookie.Value = username;
                    cookie.Expires = DateTime.Now.AddDays(7);
                    context.Response.SetCookie(cookie);
                    //寫入session 方便後面權限判斷
                    context.Session["LastUserName"] = username; //與cookie相關,默認也是關閉瀏覽器就消失
                }
                else
                {
                    //登陸失敗
                    context.Response.Redirect("sessionUserName.ashx");
                }
            } 
            #endregion
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
   
session在登陸時存入username
<body>
    <form action="sessionUserName.ashx" method="post">
        用戶名<input type="text" name="username" value="@username" /><br />
        密碼<input type="password" name="password" value="" /><br />
        <input type="submit" name="login" value="登陸" /><br />
    </form>
</body>
登陸表單提交
public class sessionUserName1 : IHttpHandler, IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //從session中判斷是否有訪問權限
            object sessionUserName = context.Session["LastUserName"];
            if (sessionUserName!=null && sessionUserName.ToString() == "admin")  //假設登陸user爲admin就有權限
            {
                context.Response.Write("能夠繼續這個頁面");
            }
            else
            {
                context.Response.Write("該用戶未登陸或者沒有權限");
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
判斷username是否有權限訪問這個頁面

 5  實現登陸後 返回進入登陸的頁面

    登陸時把username存入session中,進入其餘頁面時判斷該sessionId是否爲null。

    要想登陸後跳轉之前的頁面,須要在之前的頁面把url存入session。

    要想註銷退出登陸,須要Abandon()。

using Console_Core.BLL;
using Console_Core.Common;
using Console_Core.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;

namespace Web_Cassini.Day4.SessionCase
{
    /// <summary>
    /// lojin 的摘要說明
    /// </summary>
    public class lojin : IHttpHandler,IRequiresSessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string login = context.Request["login"];
            string html = CommonHelper.GetHtmlFromVirtualPath(context, "~/Day4/SessionCase/lojin.html");
            if(string.IsNullOrWhiteSpace(login)) //展現
            {
                html = html.Replace("@username", "").Replace("@password", "").Replace("{msg}", "");
                context.Response.Write(html);
            }
            else  //登陸
            {
                string username = context.Request["username"];
                string password = context.Request["password"];
                //根據username判斷
               List<object> list = new MyORM_BLL().SelectModelByField(typeof(TC_STUDENT), "USERNAME='" + username + "'");
               if (list.Count <= 0) //登陸失敗
               {
                   html = html.Replace("@username", "").Replace("@password", "").Replace("{msg}", "用戶名不存在");
                   context.Response.Write(html);
               }
               else if (list.Count == 1) //成功
               {
                   context.Session[MySessionClass.LOGINUSERNAME] = username;
                   //context.Response.Redirect("modifypwd.ashx");
                   //context.Response.Redirect("queryyue.ashx");
                   string LoginBeforeUrl = (string)context.Session[MySessionClass.LOGINBEFOREURL];
                   if (LoginBeforeUrl != null)
                   {
                       context.Response.Redirect(LoginBeforeUrl);
                   }
                   else
                   {
                       context.Response.Write("登陸成功");
                   }
               }
               else
               {
                   throw new Exception("內部服務器出錯:存在重複的username="+username+"的數據");
               }
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
login.ashx
<body>
    <form action="lojin.ashx" method="post">
        用戶名<input type="text" name="username" value="@username" /><span>{msg}</span><br />
        密碼<input type="password" name="password" value="@password" /><br />
        <input type="submit" name="login" value="登陸" /><br />
    </form>
</body>
login.html
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;

namespace Web_Cassini.Day4.SessionCase
{
    /// <summary>
    /// modifypwd 的摘要說明
    /// </summary>
    public class modifypwd : IHttpHandler, IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string username = (string)context.Session[MySessionClass.LOGINUSERNAME];
            if (username != null)
            {
                context.Response.Write("Hello World 修改密碼:" + username + " ......<a href=\"exit.ashx\">退出登陸</a>");
            }
            else
            {
                //爲了使登陸成功後,返回之間進入的頁面,須要把以前的url存入session中
                context.Session[MySessionClass.LOGINBEFOREURL] = context.Request.Url.ToString();
                context.Response.Redirect("lojin.ashx");
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
modifypwd.ashx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;

namespace Web_Cassini.Day4.SessionCase
{
    /// <summary>
    /// queryyue 的摘要說明
    /// </summary>
    public class queryyue : IHttpHandler, IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            string username = (string)context.Session[MySessionClass.LOGINUSERNAME];
            if (username != null)
            {
                context.Response.Write("Hello World 查詢餘額:" + username+" ......<a href=\"exit.ashx\">退出登陸</a>");
            }
            else
            {
                context.Session[MySessionClass.LOGINBEFOREURL] = context.Request.Url.ToString();
                context.Response.Redirect("lojin.ashx");
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
queryyue.ashx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;

namespace Web_Cassini.Day4.SessionCase
{
    /// <summary>
    /// eixt 的摘要說明
    /// </summary>
    public class exit : IHttpHandler, IRequiresSessionState
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Session.Abandon();
            context.Response.Redirect("lojin.ashx");
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
exit.ashx

 6  驗證碼

    要想生成驗證碼,須要生成一個圖片保存到輸出流(即顯示到頁面),並使它能夠被刷新。

    要想驗證驗證碼,須要在生成時存入session,在登陸時判斷輸出的驗證碼是否與session中驗證碼相同,若是不一樣就是驗證失敗。

public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "image/jpeg";
            Random dom = new Random();
            int num = dom.Next(1000, 10000);
            string code = num.ToString();
            context.Session[MySessionClass.VOLIDECODE] = code;
            using (Bitmap map = new Bitmap(60, 20))
            {
                using (Graphics g = Graphics.FromImage(map))
                using (Font font = new Font(FontFamily.GenericSerif, 15))
                {
                    g.DrawString(code, font, Brushes.Red, 0, 0);
                }
                map.Save(context.Response.OutputStream, ImageFormat.Jpeg);
            }
        }
volidcode.ashx

    登陸驗證時的主要代碼:

//驗證 驗證碼
string volidcode=context.Request["volidcode"];
string volidcodeInSesion = (string)context.Session[MySessionClass.VOLIDECODE];
if (volidcode!=volidcodeInSesion)
{
    html = html.Replace("{msg}", "驗證碼錯誤");
    context.Response.Write(html);
    return;
}
View Code

 7  session根本原理:

    本身寫的session--> YangGuoSessionID

    初始化YangGuoSessionID.cs時,判斷cookie中是否有YangGuoSessionID,若是有就得到sessionId的值,若是沒有就建立一個sessionId並得到值;

    當設值(寫入)時,就是把值寫入sessionId所表示的文件中;

    當取值(讀取)時,就是去除當前sessionId文件中的值。

    同時,爲了使自定義的YangGuoSessionID能夠寫入多個值,能夠將須要寫入的內容以鍵值對的形式序列化到文件中;讀取時,從文件中反序列化爲鍵值對。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization.Formatters.Binary;
using System.Web;

namespace Web_Cassini.Day4.SessionCase
{
    public class YangGuoSessionID
    {
        public const string YANGGUOSESSIONID = "YangGuoSessionID";
        private HttpContext context;
        private string sessionId;
        public YangGuoSessionID(HttpContext context)
        {
            this.context = context;
            GetYangGuoSessionID();
        }

        /// <summary>
        /// 建立自定義sessionId
        /// </summary>
        /// <returns>返回自定義cookie的值</returns>
        private string CreateYangGuoSessionID()
        {
            Guid guid = Guid.NewGuid();
            HttpCookie cookie = new HttpCookie(YANGGUOSESSIONID);
            cookie.Value = guid.ToString();
            context.Response.SetCookie(cookie);
            return cookie.Value;
        }

        /// <summary>
        /// 得到YangGuoSessionID
        /// </summary>
        /// <returns>返回YangGuoSessionID的值</returns>
        public void GetYangGuoSessionID()
        {
            HttpCookie cookie = context.Request.Cookies[YANGGUOSESSIONID];
            if (cookie == null) //判斷cookie中是否有YangGuoSessionID,沒有就建立,有就得到
            {
                this.sessionId = CreateYangGuoSessionID();
            }
            else
            {
               this.sessionId = cookie.Value;
            }
        }

        /// <summary>
        /// 設置自定義sessionId中的name的value
        /// </summary>
        /// <param name="name">須要保存的name</param>
        /// <param name="value">須要保存的對應name的value</param>
        public void SetValue(string name, string value)
        {
            string path = context.Server.MapPath("~/Day4/SessionCase/" + this.sessionId);
            Dictionary<string, string> dict = new Dictionary<string, string>();
            BinaryFormatter bf = new BinaryFormatter();
            if (File.Exists(path))
            {
                //先將文件中的內容反序列化爲鍵值對
                dict = Deserialize(path);
            }
            //更新鍵值對後
            dict[name] = value;
            //再序列化到文件中
            using (Stream s = File.OpenWrite(path))
            {
                bf.Serialize(s, dict);
            }
        }

        /// <summary>
        /// 得到自定義的sessionId的對應name的值
        /// </summary>
        /// <param name="name">須要查詢的name</param>
        /// <returns>sessionId對應文件中對應name的value</returns>
        public string GetValue(string name)
        {
            string path = context.Server.MapPath("~/Day4/SessionCase/" + this.sessionId);
            if (File.Exists(path))
            {
                //先將文件中的內容反序列化爲鍵值對
                Dictionary<string, string> dict = Deserialize(path);
                if (dict.ContainsKey(name))
                {
                    return dict[name];
                }
                else
                {
                    return null;
                }
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// 將路徑path中內容反序列化爲鍵值對
        /// </summary>
        /// <param name="path">w=文件路徑</param>
        /// <returns>鍵值對</returns>
        public Dictionary<string, string> Deserialize(string path)
        {
            //先將文件中的內容反序列化爲鍵值對
            BinaryFormatter bf = new BinaryFormatter();
            using (Stream s = File.OpenRead(path))
            {
                return (Dictionary<string, string>)bf.Deserialize(s);
            }
        }

        ///// <summary>
        ///// 設置session的值時,把值保存到sesionId對應的文件
        ///// </summary>
        ///// <param name="value">要設置的session的值</param>
        //public void SetValue(string value)
        //{
        //    string path = context.Server.MapPath("~/Day4/SessionCase/" + this.sessionId);
        //    File.WriteAllText(path, value);
        //}

        ///// <summary>
        ///// 得到session的值
        ///// </summary>
        ///// <returns>從sessionId對應文件中得到的值</returns>
        //public string GetValue()
        //{
        //    string path = context.Server.MapPath("~/Day4/SessionCase/" + this.sessionId);
        //    if (File.Exists(path))
        //    {
        //        return File.ReadAllText(path);
        //    }
        //    else
        //    {
        //        return null;
        //    }
        //}

       
    }
}
YangGuoSessionID
public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //寫入session
            YangGuoSessionID ygsesion = new YangGuoSessionID(context);
            //ygsesion.SetValue("yangguo");
            ygsesion.SetValue("username", "yzk");
            ygsesion.SetValue("時間", DateTime.Now.ToString());
        }
session1.ashx -->寫入自定義sessionId
public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            YangGuoSessionID ygsession = new YangGuoSessionID(context);
            //string str = ygsession.GetValue();
            //context.Response.Write(str);
            string username =ygsession.GetValue("username");
            string date = ygsession.GetValue("時間");
            context.Response.Write(username + "===" + date);
        }
sesion2.ashx -->讀取自定義sessionId

 8  配置進程外Session:

    (1)將服務器Session信息存儲在進程外    
        <1> 首 先,開啓asp.net state 服務: 控制面板 -> 程序和功能 -> 「打開或者關閉 Windows 功能」對話框 -> Internet 信息服務 -> 萬維網服務 -> 應用程序開發功能 -> ASP.NET。(Control Panel -> Programs - > Programs and Features -> Turn Windows features on or off - > Internet Information Services -> World Wide Web Services -> Application Development Features -> ASP.NET。)

        勾選 ASP.NET 選項後,在 Control Panel -> System and Security -> Administrative Tools -> Services 服務中就會出現 ASP.NET State Service 服務。

        在屬性對話框中設置啓動類型爲自動(Automatic),最後啓動。(備註:Windows XP 系統是在控制面板中的「添加和刪除程序」中設置)


        <2> 而後,回到Web.config文件中上述的段落中,將mode的值改成StateServer。

    <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"  timeout="20"></sessionState>

    保存文件後的從新打開一個IE,打開 SessionState.aspx頁面,保存一些信息到Session中。這時,讓咱們重起IIS,再回到SessionState.aspx頁面中查 看剛纔的Session信息,發現沒有丟失。                       實際上,這種將Session信息存儲在進程外的方式不光指能夠將信息存儲在本機的進程外,還能夠將Session信息存儲在其餘的服務器的進程中。 這時,不光須要將mode的值改成StateServer,還須要在stateConnectionString中配置相應的參數。例如你的計算你是 192.168.0.1,你想把Session存儲在IP爲192.168.0.2的計算機的進程中,就須要設置成這 樣:stateConnectionString="tcpip=192.168.0.2:42424"。固然,不要忘記在192.168.0.2的計算 機中裝上.NET   Framework,而且啓動ASP.NET   State   Services服務。                        (2)將服務器Session信息存儲在SQL   Server中             <1>首先,仍是讓咱們來作一些準備工做。啓動SQL   Server和SQL   Server代理服務。在SQL   Server中執行一個叫作InstallSqlState.sql的腳本文件。這個腳本文件將在SQL   Server中建立一個用來專門存儲Session信息的數據庫,及一個維護Session信息數據庫的SQL   Server代理做業。咱們能夠在如下路徑中找到那個文件:                     [system   drive]\winnt\Microsoft.NET\Framework\[version]\             而後打開查詢分析器,鏈接到SQL   Server服務器,打開剛纔的那個文件而且執行。稍等片刻,數據庫及做業就創建好了。這時,你能夠打開企業管理器,看到新增了一個叫ASPState的 數據庫。可是這個數據庫中只是些存儲過程,沒有用戶表。實際上Session信息是存儲在了tempdb數據庫的 ASPStateTempSessions表中的,另一個ASPStateTempApplications表存儲了ASP中Application對 象信息。這兩個表也是剛纔的那個腳本創建的。另外查看管理->SQL   Server代理->做業,發現也多了一個叫作ASPState_Job_DeleteExpiredSessions的做業,這個做業實際上就是 每分鐘去ASPStateTempSessions表中刪除過時的Session信息的。                       <2>接着,咱們返回到Web.config文件,修改mode的值改成SQLServer。注意,還要同時修改sqlConnectionString的值,格式爲:                     sqlConnectionString="data   source=localhost;   Integrated   Security=SSPI;"             其中data   source是指SQL   Server服務器的IP地址,若是SQL   Server與IIS是一臺機子,寫127.0.0.1就好了。Integrated   Security=SSPI的意思是使用Windows集成身份驗證,這樣,訪問數據庫將以ASP.NET的身份進行,經過如此配置,可以得到比使用 userid=sa;password=口令的SQL   Server驗證方式更好的安全性。固然,若是SQL   Server運行於另外一臺計算機上,你可能會須要經過Active   Directory域的方式來維護兩邊驗證的一致性。                       一樣,讓咱們作個試驗。向SessionState.aspx中添加Session信息,這時發現Session信息已經存在SQL   Server中了,即便你重起計算機,剛纔的Session信息也不會丟失。如今,你已經徹底看見了Session信息究竟是什麼樣子的了,並且又是存儲 在SQL   Server中的,能幹什麼就看你的發揮了

相關文章
相關標籤/搜索