C#中如何保存cookie到本地

2025-05-16 12:07:22
推荐回答(4个)
回答1:

正好手上有保存密码的源码,发给你

//如果用户选择了保存密码,则将用户名和密码保存在cookie中

protected void IsSavePwd(String uName, String uPwd)

    {

        if (cb_savePwd.Checked)            // 用户是否选择保存用户

        {

            List strs = new List();

            List newStrs = new List();

            strs.Add(uName);

            strs.Add(uPwd);

            newStrs = this.Encrypt(strs);                   //这里对用户名和密码加密      

            HttpCookie cookie = new HttpCookie(newStrs[0], newStrs[1]);     //实例化HttpCookie类并添加值

            cookie.Expires = DateTime.Now.AddDays(7);                             //设置保存时间

            Response.Cookies.Add(cookie); 

        }

    }

//根据用户名获取cookie中对应的密码

protected String GetPwd(String nName)

{

        List strs = new List();

        strs.Add(nName);                 //参数为用户名

        List strsPwd = new List();

        strsPwd.Add(Supertea.Rule.Get_Cookie(this.Encrypt(strs)[0]));        //这里解密

        //定义字符串变量来保存cookie文件中用户名对应的密码

        return this.Decrypt(strsPwd)[0];

 }

//当用户名的textbox值改变时,

 protected void txt_username_TextChanged(object sender, EventArgs e)

    {

        txt_password.Attributes.Add("value", this.GetPwd(txt_username.Text));

    }

实现的功能:

根据不同的用户名获取存储在cookies中的密码

回答2:

存:

//创建Cookie
HttpCookie Cookies = new HttpCookie("UserInfo");
Cookies.Values["UserName"] = "张三";
Cookies.Values["UserPwd"] = "Zhangsan";
Cookies.Expires = DateTime.Now.AddHours(1);//设置Cookies的有效时间, 这里设置的是一个小时
Response.Cookies.Add(Cookies);//添加到 Cookie 集合
取:
读取Cookie
用户名: Request.Cookies["UserInfo"]["UserName"];
密 码: Request.Cookies["UserInfo"]["UserPwd"];

回答3:

C#中可以用一个方法把CookieContainer所有的Cookie读出来,
此方法的代码如下:
public static List GetAllCookies(CookieContainer cc)
{
List lstCookies = new List();

Hashtable table = (Hashtable)cc.GetType().InvokeMember("m_domainTable",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField |
System.Reflection.BindingFlags.Instance, null, cc, new object[] { });

foreach (object pathList in table.Values)
{
SortedList lstCookieCol = (SortedList)pathList.GetType().InvokeMember("m_list",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.GetField
| System.Reflection.BindingFlags.Instance, null, pathList, new object[] { });
foreach (CookieCollection colCookies in lstCookieCol.Values)
foreach (Cookie c in colCookies) lstCookies.Add(c);
}

return lstCookies;
}
然后,再保存到文件:
StringBuilder sbc = new StringBuilder();
List cooklist = Code.ProgTool.GetAllCookies(CookieContainer);
foreach (Cookie cookie in cooklist)
{
sbc.AppendFormat("{0};{1};{2};{3};{4};{5}\r\n",
cookie.Domain,cookie.Name, cookie.Path, cookie.Port,
cookie.Secure.ToString(), cookie.Value);
}

FileStream fs = File.Create("d:\\chinarencookies.txt");
fs.Close();
File.WriteAllText("d:\\chinarencookies.txt", sbc.ToString(), System.Text.Encoding.Default);
读出所有Cookie
string[] cookies = File.ReadAllText("d:\\chinarencookies.txt", System.Text.Encoding.Default).Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
foreach (string c in cookies)
{
string[] cc = c.Split(";".ToCharArray());
Cookie ck = new Cookie(); ;
ck.Discard =false;
ck.Domain = cc[0];
ck.Expired =true;
ck.HttpOnly = true;
ck.Name = cc[1];
ck.Path = cc[2];
ck.Port = cc[3];
ck.Secure = bool.Parse(cc[4]);
ck.Value = cc[5];
CookieContainer.Add(ck);
}

回答4:

//创建一个Cookie对象,"ck1"为Cookie的名称
HttpCookie cookie = new HttpCookie("ck1");
//设置要保存到Cookie的值,用户名|密码
cookie.Value = "admin|pwd";
//设置Cookie的生命周期
cookie.Expires = DateTime.Now.AddDays(1);
//写入Cookie到客户端
Response.Cookies.Add(cookie);

//根据Cookie名称取得Cookie的值
String cookieValue = Request.Cookies["ck1"].Value;
//解析Cookie的Value,从而得到用户名和密码
String[] strs = cookieValue.Split('|');
//用户名
String userName = strs[0];
//密码
String password = strs[1];