乱码 乱码 还是乱码了 小弟求教床上等你的大牛们 如何才能无码?

lijing3333 2011-05-13 02:47:07
我的网站 有个商品详情页面 左下角有用户最近浏览这个模块 我是通过cookie 重复读写覆盖 替换原来的cookie来记录的 现在问题来了 第一次浏览的时候 记录了一个商品这里写了一个cookie操作 第二次再浏览一个商品的时候 覆盖原有cookie 这样就出现乱码了 我自己估计是覆盖cookie出的问题 但是现在我也不知道怎么处理的好 代码比较乱 大牛们帮小弟看看 求教了
网站地址:www.aizooo.com

这个是详细商品页面 左下角最近用户浏览模块 第二次记录后就都成乱码了
http://www.aizooo.com/files/template/201105/20110510112920247.html


//一般处理程序
public void ProcessRequest(HttpContext context)
{
SetGoodsCookie(context);
//零时存储的table
DataTable dt = new DataTable();
DataColumn cell = new DataColumn("goodsId");
DataColumn cell1 = new DataColumn("goodsName");
DataColumn cell2 = new DataColumn("goodsImage");
DataColumn cell3 = new DataColumn("salePrice");
DataColumn cell4 = new DataColumn("html");
DataColumn cell5 = new DataColumn("scj");
dt.Columns.Add(cell);
dt.Columns.Add(cell1);
dt.Columns.Add(cell2);
dt.Columns.Add(cell3);
dt.Columns.Add(cell4);
dt.Columns.Add(cell5);
StringBuilder str = new StringBuilder();
//我估计是下面一块二次覆盖cookie的代码 出现的问题 因为第一次读取是好的 以后覆盖cookie记录操作之后就乱码了 我的网站本身是gb2312的 其他的没神马问题 应该不关这个的事。是不是cookie读取出来
if (context.Request.Cookies["meGoods"] != null)
{
HttpCookie cookie = context.Request.Cookies["meGoods"];
int myCookieCount = cookie.Values.Count;
for (int i = 0; i < myCookieCount; i++)
{
if (i > 4)
break;
DataRow row = dt.NewRow();
dt.Rows.Add(row);
string[] gsarr = cookie.Values[i].Split(',');

for (int n = 0; n < gsarr.Length; n++)
{
dt.Rows[i][n] = gsarr[n];
}
}
} str.Append("<h3>最近您看过</h3>");

str.Append("<ul class='ulHotGoodsItems'>");



foreach (DataRow row in dt.Rows)
{
str.Append("<li><a href='../../../files/template/" + row["html"].ToString() + "'>");
str.Append("<img alt='" + row["goodsName"].ToString() + "' ");
str.Append("src='../../../files/goodsMinItems/" + row["goodsImage"].ToString() + "' /></a><p class='gn'>");
str.Append("<a href='../../../files/template/" + row["html"].ToString() + "' title='" + row["goodsName"].ToString() + "'>" + CheckStr(row["goodsName"], 9) + "</a></p><p class='sc'><span>市场价:¥" + row["scj"] + ".00</span></p>");
str.Append("<p class='sj'>");
str.Append("<span>¥" + row["salePrice"].ToString() + ".00</span></p>");
str.Append("</li>");

}

str.Append(" </ul>");

context.Response.Write(str.ToString());
}

private void SetGoodsCookie(HttpContext context)
{
if (!string.IsNullOrEmpty(context.Request.Form["gid"]))
{
if (context.Request.Cookies["meGoods"] != null)
{
HttpCookie cookie = context.Request.Cookies["meGoods"];
HttpCookie cookie2 = new HttpCookie("meGoods");
int myCookieCount = cookie.Values.Count;
//二次写入cookie
if (myCookieCount < 15)
{
string cookValue = context.Request.Form["gid"] + "," + context.Server.UrlDecode(context.Request.Form["goodsTitle"]) + "," + context.Request.Form["gimg"] + "," + context.Request.Form["gsalePrice"] + "," + context.Request.Form["html"] + "," + context.Request.Form["scj"];

cookie2.Values.Add((myCookieCount + 1).ToString(), cookValue);

for (int i = 0; i < myCookieCount; i++)
{
cookie2.Values.Add(i.ToString(), cookie.Values[i]);
}

context.Response.Cookies.Add(cookie2);
}

}
//第一次写cookie
if (context.Request.Cookies["meGoods"] == null)
{
HttpCookie cookie = new HttpCookie("meGoods");
string cookValue = context.Request.Form["gid"] + "," + context.Server.UrlDecode(context.Request.Form["goodsTitle"]) + "," + context.Request.Form["gimg"] + "," + context.Request.Form["gsalePrice"] + "," + context.Request.Form["html"] + "," + context.Request.Form["scj"];
cookie.Values.Add("0", cookValue);
context.Response.Cookies.Add(cookie);
}
}
}

public string CheckStr(object obj, int num)
{
if (obj.ToString().Length > num)
{
obj = obj.ToString().Substring(0, num);
return obj.ToString();
}
else
return obj.ToString();
}


早上一般大牛比较多 先发帖子 早上醒了看
...全文
13218 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
深渊冷凝 2011-05-14
  • 打赏
  • 举报
回复
哎,很委婉
lijing3333 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zx75991 的回复:]

C# code

Encoding gb2312 = Encoding.GetEncoding("gb2312");
Response.ContentEncoding = gb2312;
newCookie.Value = Server.UrlEncode(username);
TimeSpan ts = new TimeSpan(14, 0, 0, 0);
newCookie.Ex……
[/Quote]

谢谢 很有可能是这个原因 等会试试 先吃饭。。。。
天下在我心 2011-05-13
  • 打赏
  • 举报
回复

Encoding gb2312 = Encoding.GetEncoding("gb2312");
Response.ContentEncoding = gb2312;
newCookie.Value = Server.UrlEncode(username);
TimeSpan ts = new TimeSpan(14, 0, 0, 0);
newCookie.Expires = DateTime.Now.Add(ts);
Response.Cookies.Add(newCookie);

lijing3333 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zx75991 的回复:]

这个问题我也碰到过,最后用11楼的方法解决的问题
http://topic.csdn.net/u/20110120/15/acff4ae4-b463-472c-ac45-d5ccadd8779f.html
[/Quote]

你好 请问这个 encodeURI存cookie时编码好像就可以解决了 是什么意思? 没怎么看明白
有简单点的代码看看么
lijing3333 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhuzhuyuxiang 的回复:]

LZ不用覆盖,直接设置过期就行
[/Quote]

3Q 我研究下 再上来看看
lijing3333 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 winner2050 的回复:]

非数字、英文必须要编码。
而且要检查是否带了禁止的符号。

顺便说,你这样作购物车很危险。应该仅仅保存个主键就够了,价格这种敏感的东西很容易被人家钻漏洞。
[/Quote]
恩 我到时候再改改。。。。
子夜__ 2011-05-13
  • 打赏
  • 举报
回复
跟机器语言设置有关吗?

语言设置英文看 乱码不。
lorinzhang 2011-05-13
  • 打赏
  • 举报
回复
床上等大牛?哇,点开你的站我赶紧关了,据描述,还是编码一下试试,#8应该可以了
快乐的小二兔 2011-05-13
  • 打赏
  • 举报
回复
11楼的方法????
8楼是神人??
xuexiaodong2009 2011-05-13
  • 打赏
  • 举报
回复
直接设置过期就行
ZhuZhuYuXiang 2011-05-13
  • 打赏
  • 举报
回复
LZ不用覆盖,直接设置过期就行
jeje 2011-05-13
  • 打赏
  • 举报
回复
呵呵.要LZ多給你點分
天下在我心 2011-05-13
  • 打赏
  • 举报
回复
这个问题我也碰到过,最后用11楼的方法解决的问题
http://topic.csdn.net/u/20110120/15/acff4ae4-b463-472c-ac45-d5ccadd8779f.html
kk297173176 2011-05-13
  • 打赏
  • 举报
回复
lz 害死我了 旁边一群女士。。。。我想着点开你的网站看看 结果 人家都以为咱上班没事浏览那些东东哩。。。
  • 打赏
  • 举报
回复
乱码肯定是编码格式的问题。不是英文和数字你都统一一下编码格式就行了。
Jack2013tong 2011-05-13
  • 打赏
  • 举报
回复
最近浏览商品这么做倒可以不考虑安全问题,但如有中文字符类的要编码倒是真的
only_lonely 2011-05-13
  • 打赏
  • 举报
回复
白加黑说的很对。
winner2050 2011-05-13
  • 打赏
  • 举报
回复
非数字、英文必须要编码。
而且要检查是否带了禁止的符号。

顺便说,你这样作购物车很危险。应该仅仅保存个主键就够了,价格这种敏感的东西很容易被人家钻漏洞。
lijing3333 2011-05-13
  • 打赏
  • 举报
回复
................解决了。。。。。不容易啊。。 结贴。。。
lijing3333 2011-05-13
  • 打赏
  • 举报
回复
还是不行 郁闷了 改成这样都不行。。。。


using System;
using System.Collections;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Text;

namespace LetWeb.process
{
/// <summary>
/// $codebehindclassname$ 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class getSeeCookie : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
context.Response.ContentEncoding = Encoding.GetEncoding("gb2312");
context.Request.ContentEncoding = Encoding.GetEncoding("gb2312");
SetGoodsCookie(context);

DataTable dt = new DataTable();
DataColumn cell = new DataColumn("goodsId");
DataColumn cell1 = new DataColumn("goodsName");
DataColumn cell2 = new DataColumn("goodsImage");
DataColumn cell3 = new DataColumn("salePrice");
DataColumn cell4 = new DataColumn("html");
DataColumn cell5 = new DataColumn("scj");
dt.Columns.Add(cell);
dt.Columns.Add(cell1);
dt.Columns.Add(cell2);
dt.Columns.Add(cell3);
dt.Columns.Add(cell4);
dt.Columns.Add(cell5);
StringBuilder str = new StringBuilder();

if (context.Request.Cookies["meGoods"] != null)
{
context.Request.ContentEncoding = Encoding.GetEncoding("gb2312");
HttpCookie cookie = context.Request.Cookies["meGoods"];
int myCookieCount = cookie.Values.Count;
for (int i = 0; i < myCookieCount; i++)
{
if (i > 4)
break;
DataRow row = dt.NewRow();
dt.Rows.Add(row);
string cookieValue = context.Server.UrlDecode(cookie.Values[i]);
string[] gsarr = cookieValue.Split('|');
for (int n = 0; n < gsarr.Length; n++)
{
dt.Rows[i][n] = context.Server.UrlDecode(gsarr[n]);
}
}
}
str.Append("<h3>最近您看过</h3>");

str.Append("<ul class='ulHotGoodsItems'>");



foreach (DataRow row in dt.Rows)
{
str.Append("<li><a href='../../../files/template/" + context.Server.UrlDecode(row["html"].ToString()) + "'>");
str.Append("<img alt='" + context.Server.UrlDecode(row["goodsName"].ToString()) + "' ");
str.Append("src='../../../files/goodsMinItems/" + row["goodsImage"].ToString() + "' /></a><p class='gn'>");
str.Append("<a href='../../../files/template/" + context.Server.UrlDecode(row["html"].ToString()) + "' title='" + context.Server.UrlDecode(row["goodsName"].ToString()) + "'>" + context.Server.UrlDecode(CheckStr(row["goodsName"], 9)) + "</a></p><p class='sc'><span>市场价:¥" + row["scj"] + ".00</span></p>");
str.Append("<p class='sj'>");
str.Append("<span>¥" + row["salePrice"].ToString() + ".00</span></p>");
str.Append("</li>");

}

str.Append(" </ul>");

context.Response.Write(str.ToString());
}

private void SetGoodsCookie(HttpContext context)
{
Encoding gb2312 = Encoding.GetEncoding("gb2312");
context.Request.ContentEncoding = gb2312;
if (!string.IsNullOrEmpty(context.Request.Form["gid"]))
{
if (context.Request.Cookies["meGoods"] != null)
{
HttpCookie cookie = context.Request.Cookies["meGoods"];
HttpCookie cookie2 = new HttpCookie("meGoods");
int myCookieCount = cookie.Values.Count;

if (myCookieCount < 15)
{
string cookValue = context.Server.UrlDecode(context.Request.Form["gid"]) + "|" + context.Server.UrlDecode(context.Request.Form["goodsTitle"]) + "|" + context.Server.UrlDecode(context.Request.Form["gimg"]) + "|" + context.Server.UrlDecode(context.Request.Form["gsalePrice"]) + "|" + context.Server.UrlDecode(context.Request.Form["html"]) + "|" + context.Server.UrlDecode(context.Request.Form["scj"]);
context.Response.ContentEncoding = gb2312;
cookie2.Values.Add((myCookieCount + 1).ToString(), context.Server.UrlDecode(cookValue));

for (int i = 0; i < myCookieCount; i++)
{
cookie2.Values.Add(i.ToString(), context.Server.UrlDecode(cookie.Values[i]));
}
//cookie.Expires = DateTime.Now.AddDays(-1);
context.Response.Cookies.Add(cookie2);
}

}

if (context.Request.Cookies["meGoods"] == null)
{
HttpCookie cookie = new HttpCookie("meGoods");
string cookValue = context.Server.UrlDecode(context.Request.Form["gid"]) + "|" + context.Server.UrlDecode(context.Request.Form["goodsTitle"]) + "|" + context.Server.UrlDecode(context.Request.Form["gimg"]) + "|" + context.Server.UrlDecode(context.Request.Form["gsalePrice"]) + "|" + context.Server.UrlDecode(context.Request.Form["html"]) + "|" + context.Server.UrlDecode(context.Request.Form["scj"]);
context.Response.ContentEncoding = gb2312;
cookie.Values.Add("0", context.Server.UrlDecode(cookValue));
context.Response.Cookies.Add(cookie);
}
}
}

public string CheckStr(object obj, int num)
{
if (obj.ToString().Length > num)
{
obj = obj.ToString().Substring(0, num);
return obj.ToString();
}
else
return obj.ToString();
}

public bool IsReusable
{
get
{
return false;
}
}
}
}

加载更多回复(3)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧