https://blog.csdn.net/cdnight/article/details/50971216
1. cookie中只能储存字符串,麻烦告知下用什么方式可以转换为字符串
并且需要转换回来。
var obj = JSON.parse(str); //由JSON字符串转换为JSON对象
var last=obj.toJSONString(); //将JSON对象转化为JSON字符
或者
var last=JSON.stringify(obj); //将JSON对象转化为JSON字符
2.Cookie是一个伟大的发明,它允许Web开发者保留他们的用户的登录状态。但是当你的站点有一个以上的域名时就会出现问题了。在Cookie规范上说,一个cookie只能用于一个域名,不能够发给其它的域名。因此,如果在浏览器中对一个域名设置了一个cookie,这个cookie对于其它的域名将无效。如果你想让你的用户从你的站点中的其中一个进行登录,同时也可以在其它域名上进行登录,这可真是一个大难题。
跨二级域名
我们知道cookie是可以跨二级域名来访问,这个很好理解,例如你 www.test1.com 在的web应用程序创建了一个cookie,要想在bbs.test1.com这样的二级域名对应的应用程序中访问,就必须你在创建cookie的时候设置domain参数domain=test1.com。 以asp.net为例 代码如下:
HttpCookie cookie = new HttpCookie("name", "www.Admin10000.com");
cookie.Domain = "test1.com";
cookie.Path = "/";
Response.Cookies.Add(cookie);
跨顶级域名
如果我不是二级域名而是完全在不同顶级域名中,例如 www.test1.com 所在的web应用程序创建了一个cookie,想要在 www.test2.com 或其二级域名的应用程序中访问,改怎么办呢?我们知道靠常规反的方法是访问不了的,关键我们就是看看有没有方法可以访问。事实是Cookie可以在一定条件下跨域,而不是随心所欲的实现跨域。
我们来做个测试,看看两个站点 www.test1.com 和 www.test2.com 如何实现cookie跨域访问。 按照常规我们需要有2个顶级域名,并且有DNS服务器才能够配置域名,否则我们是无法验证的,但是这里我们也没有必要那么麻烦,我们可以通过修改hosts文件来模拟。在 c:\windows\system32\drivers\etc 中有 hosts文件,在末尾添加上
127.0.0.1 www.test1.com
127.0.0.1 www.test2.com
两行,就可以将本机用上面的域名访问本机回环地址了。我们只需要在IIS上部署一套程序,ip为本机回环地址,用两个域名分别访问就可以了。
2 简单cookie方法
function getCookie(name)
{
var cookieValue = "";
var search = name + "=";
if (document.cookie.length > 0)
{
offset = document.cookie.indexOf (search);
if (offset != -1)
{
offset += search.length;
end = document.cookie.indexOf (";", offset);
if (end == -1)
end = document.cookie.length;
cookieValue = unescape (document.cookie.substring (offset, end))
}
}
return cookieValue;
}
<script>
var name = "_system_version";
var days = 7;
var version=getCookie("_system_version");
if(version =="2.0")
{
version = "3.0";
}
var path = "/";
var expires = new Date();
expires.setTime(expires.getTime() + days * 3600000 * 24);
path = path == "" ? "" : ";path=" + path;
var _expires = (typeof days) == "string" ? "" : ";expires=" + expires.toUTCString();
document.cookie = name +"=" + version + _expires + path;
</script>
网上商城收索记录实现
/** * 增加搜索记录,放入cookie中
*/
function addRecords(searchParams)
{
var name ="supermarket_searchrecords";
var cookieValue = $.cookie(name);
var newCookie = "";
var breedIdAndName = "";
if(searchParams["breedInfos"] !="" && typeof(searchParams["breedInfos"]) !="undefined")
{
var breedInfos = searchParams["breedInfos"];
for ( var breedId in breedInfos) {
var breedName = breedInfos[breedId];
if (breedName != "") {
if (breedIdAndName == "") {
breedIdAndName += breedId +"-"+breedName;
} else {
breedIdAndName += "_" + breedId +"-"+breedName;
}
}
}
}
//添加或更改的最后一条的记录信息,记录以下收索字段
var addRecord = "keyword:"+ (typeof(searchParams["keyword"])=="undefined" ? "" : searchParams["keyword"])+";"
+ "breedIds:"+(typeof(searchParams["breedIds"]) =="undefined" ? "":searchParams["breedIds"])+";"
+ "breedInfos:"+breedIdAndName+";"
+ "materials:"+(typeof(searchParams["materials"]) =="undefined" ? "": searchParams["materials"])+";"
+"specs:"+(typeof(searchParams["specs"]) =="undefined" ? "": searchParams["specs"])+";"
+ "cityId:"+(typeof(searchParams["cityId"])=="undefined" ? "":searchParams["cityId"])+";"
+ "cityName:"+(typeof(searchParams["cityName"]) =="undefined" ? "": searchParams["cityName"])+";"
+ "brands:"+(typeof(searchParams["brands"]) =="undefined" ? "": searchParams["brands"])+";"
+ "warehouses:"+(typeof(searchParams["warehouses"]) =="undefined" ? "":searchParams["warehouses"])+";"
+ "startPrice:"+(typeof(searchParams["startPrice"]) =="undefined" ? "": searchParams["startPrice"])+";"
+ "endPrice:"+(typeof(searchParams["endPrice"]) =="undefined" ? "": searchParams["endPrice"])+";";
if (cookieValue != null && cookieValue != "")
{
var uneacapeCookieValue = unescape(cookieValue); // 解码
//操作收索记录,如果已经存在了,不再添加或改变
if(uneacapeCookieValue.indexOf(addRecord) == -1)
{
var records = uneacapeCookieValue.split("|");
var size = records.length;
var lastRecords = records[records.length - 1].split(";");//最近的一条cookie
var recordParams ={};//把cookie中的最后一条转换成对象
var addFlag = false;//默认false,不添加只是改变最后一条
//减一因为最后一个对象也有;(分号)
for(var i=0;i<lastRecords.length-1;i++)
{
var record = lastRecords[i].split(":");
recordParams[record[0]] = record[1];
}
if (searchParams != null && recordParams != null)
{
//如果只是添加条件,在最近一条cookie中赋值,即改变最后一条Cookie,如果条件变化包括删除了某个条件,则在原有cookie基础上新加记录
//key1:value1;key2:value2;...key9:value9;|key1:value1;key2:value2;...key9:value9;
for ( var pro in recordParams)
{
//breedInfos变化时,breedIds也会变化,不需要根据它判断
if( recordParams[pro] !="" && recordParams[pro] !="undefined" && pro !="breedInfos")
{
//不为空的,就要判断它对应的值有没有变化
if(recordParams[pro] !=searchParams[pro])
{
addFlag = true;
break;
}
}
}
//只存储最近的n(目前n=5)条cookie,大于n-1时
if(size > 4)
{
//true,n——>n-1,全部向左平移一个,即删除第一个,最后一个添加即第n个添加;
if(addFlag)
{
records.shift();
records.push(addRecord);
newCookie = records.join("|");
}
//false 改变最后一个,即第n个的值;
else
{
records.pop();
records.push(addRecord);
newCookie = records.join("|");
}
}
//cookie条数小于n时
else
{
//true添加一条
if(addFlag)
{
records.push(addRecord);
newCookie = records.join("|");
}
//改变最后一条逻辑
else
{
records.pop();
records.push(addRecord);
newCookie = records.join("|");
}
}
}
}
else
{
newCookie = uneacapeCookieValue;
}
}
else
{
// 如果不存在Cookie 创建
newCookie = addRecord;
}
//添加cookie
$.cookie(name, escape(newCookie), {expires: 30, domain:'.banksteel.com', path: '/'});
//cookie变化,刷新收索记录
showSearchHistory();
}
/**
* 删除某条搜索记录
*/
function removeRecord(revNum)
{
var name ="supermarket_searchrecords";
var cookieValue = $.cookie(name);
if (cookieValue != null && cookieValue != "")
{
var uneacapeCookieValue = unescape(cookieValue); // 解码
var records = uneacapeCookieValue.split("|");
var newRecords ="";
//当revNum等于0时与空相等,所以!==;
if(records != null && revNum !=="")
{
records.splice(revNum, 1);
newRecords = records.join("|");
}
var newCookie = newRecords;
//添加cookie
$.cookie(name, escape(newCookie), {expires: 30, domain:'.banksteel.com', path: '/'});
//刷新收索记录
showSearchHistory();
}
}
/**
*展示收索记录
*/
function showSearchHistory(){
var name ="supermarket_searchrecords";
var cookieValue = $.cookie(name);
$("#hisul").empty();
var title = "<li class=\"tit\">搜索记录</li>";
$("#hisul").append(title);
if (cookieValue != null && cookieValue != "")
{
var uneacapeCookieValue = unescape(cookieValue);
var records = uneacapeCookieValue.split("|");
//倒序展示
for(var j=records.length-1;j>=0;j--)
{
var recordParams ={};//每次生成一组新的对象集
var perRecord = records[j].split(";");
var li = "<li class='con' id=\"hisli_" + j + "\"></li>";
var a1 ="<a href=\"javascript:;\" class=\"a1\" id=\"hisa1_" + j +"\"></a>";
var a2 ="<a href=\"javascript:;\" class=\"con\" id=\"hisa2_" + j +"\">删除</a>";
//var a2 ="<span class=\"a2\" id=\"hisa2_" + j +"\">删除</span>";
var recordSpan ="";
var breedparam ={};
for(var i=0;i<perRecord.length-1;i++)
{
var record = perRecord[i].split(":");
//把cookie中的每一条转换成对象
if(record[1]=="undefined")
{
recordParams[record[0]] = "";
}
else
{
recordParams[record[0]] = record[1];
}
//整合收索记录字段
if(record[1] != "" && record[1] != "undefined" && record[0] != "breedIds" && record[0] != "cityId")
{
//处理品名字段
if(record[0]=="breedInfos")
{
var breedNames = "";
var breedIdAndNames = record[1].split("_");
for(var n=0;n<breedIdAndNames.length;n++)
{
var perbreedId = breedIdAndNames[n].split("-")[0];
var perbreedName = breedIdAndNames[n].split("-")[1];
breedparam[perbreedId] = perbreedName;
recordParams["breedInfos"] = breedparam;
if(breedNames =="") {
breedNames = perbreedName;
}else{
breedNames = breedNames +","+perbreedName;
}
}
//每两个字段间有加号
if(recordSpan=="")
{
recordSpan = breedNames;
}
else
{
recordSpan = recordSpan +"<span>+</span>"+breedNames;
}
}
else if(record[0]=="brands" || record[0]=="keyword" || record[0]=="breedNames" || record[0]=="warehouses" || record[0]=="specs")
{
if(recordSpan=="")
{
recordSpan = unescape(record[1]);
}
else
{
recordSpan = recordSpan +"<span>+</span>"+ unescape(record[1]);
}
}
else
{
if(recordSpan=="")
{
recordSpan = record[1];
}
else
{
recordSpan = recordSpan +"<span>+</span>"+ record[1];
}
}
}
}
if(recordSpan !="")
{
$("#hisul").append(li);
$("#hisli_"+j).append(a1);
$("#hisli_"+j).append(a2);
$("#hisa1_"+j).append(recordSpan);
$("#hisa1_"+j).attr("onclick", "searchByParam("+JSON.stringify(recordParams)+");");
$("#hisa2_"+j).attr("onclick", "removeRecord("+j+");");
}
}
}
}
购物车cookie实现:
/**
* 获取cookie值
* @param name
* @returns {String}
*/
function getCookie(name) {
var cookieValue = "";
var search = name + "=";
if (document.cookie.length > 0) {
offset = document.cookie.indexOf(search);
if (offset != -1) {
offset += search.length;
end = document.cookie.indexOf(";", offset);
if (end == -1)
end = document.cookie.length;
cookieValue = unescape(document.cookie.substring(offset, end))
}
}
return cookieValue;
}
/**
* 获取资源Id
*/
function changeItem() {
var ids = "";
obj = document.getElementsByName("resourceId");
for (i = 0; i < obj.length; i++) {
if (ids == "") {
ids = obj[i].value;
} else {
ids = ids + "," + obj[i].value;
}
}
$("#ids").val(ids);
var id = ids.split(",");
var averageQty = "";
var items = "";
var qtyAll = "";
var amt = "";
for(var i=0;i<id.length;i++)
{
averageQty = $("#averageQty_"+id[i]).text().split(":")[1];
items = $("#"+id[i]).val();
amt = $("#amt_"+ id[i]).text().split(":")[1];
qtyAll = parseFloat(averageQty) * items;
$("#qty_"+id[i]).text(parseFloat(qtyAll).toFixed(4));
amt = amt * qtyAll;
$("#amtAll_"+id[i]).text(parseFloat(amt).toFixed(2));
}
}
/** 删除一行 */
function deleteCurrentRow(obj, id) {
var idsDel = "";
var resourceIdDel = getCookie("_cart_resource_ids");
var resIdsDel = resourceIdDel.split("|");
for (var i = 0; i < resIdsDel.length; i++) {
if (resIdsDel[i] != id) {
if (idsDel == "") {
idsDel = resIdsDel[i];
} else {
idsDel = idsDel + "|" + resIdsDel[i];
}
}
}
var name = "_cart_resource_ids";
var days = 7;
var value = idsDel;
var path = "/";
var expires = new Date();
expires.setTime(expires.getTime() + days * 3600000 * 24);
path = path == "" ? "" : ";path=" + path;
var _expires = (typeof days) == "string" ? "" : ";expires="
+ expires.toUTCString();
var domain = ".banksteel.com";
domain = domain == "" ? "" : ";domain=" + domain;
document.cookie = name + "=" + value + _expires + path + domain;
var idMap = ""
var ids = $("#ids").val();
var idList = ids.split(",");
for (var i = 0; i < idList.length; i++) {
if (idList[i] != id) {
if (idMap == "") {
idMap = idList[i];
} else {
idMap = idMap + "," + idList[i];
}
}
}
$("#ids").val(idMap);
var tr = obj.parentNode.parentNode;
var tbody = tr.parentNode;
var ids = "";
if (tbody.children.length > 1) {
tbody.removeChild(tr);
if (tbody.children.length == 1) {
tbody.remove();
}
var resIds = $("#ids").val();
var eachIds = resIds.split(",");
for (var i = 0; i < eachIds.length; i++) {
if (eachIds[i] != id) {
if (ids == "") {
ids = eachIds[i];
} else {
ids = ids + "," + eachIds[i];
}
}
}
$("#ids").val(ids);
}
}
/** 删除一行 */
function newDeleteCurrentRow(obj, id) {
var idsDel = "";
var resourceIdDel = getCookie("_cart_resource_ids");
var resIdsDel = resourceIdDel.split("|");
for (var i = 0; i < resIdsDel.length; i++) {
if (resIdsDel[i] != id) {
if (idsDel == "") {
idsDel = resIdsDel[i];
} else {
idsDel = idsDel + "|" + resIdsDel[i];
}
}
}
var name = "_cart_resource_ids";
var days = 7;
var value = idsDel;
var path = "/";
var expires = new Date();
expires.setTime(expires.getTime() + days * 3600000 * 24);
path = path == "" ? "" : ";path=" + path;
var _expires = (typeof days) == "string" ? "" : ";expires="
+ expires.toUTCString();
var domain = ".banksteel.com";
domain = domain == "" ? "" : ";domain=" + domain;
document.cookie = name + "=" + value + _expires + path + domain;
var idMap = ""
var ids = $("#ids").val();
var idList = ids.split(",");
for (var i = 0; i < idList.length; i++) {
if (idList[i] != id) {
if (idMap == "") {
idMap = idList[i];
} else {
idMap = idMap + "," + idList[i];
}
}
}
$("#ids").val(idMap);
var tr = obj.parentNode.parentNode;
var tbody = tr.parentNode;
var ids = "";
if (tbody.children.length > 1) {
tbody.removeChild(tr);
if (tbody.children.length == 1) {
tbody.parentNode.parentNode.remove();
}
var resIds = $("#ids").val();
var eachIds = resIds.split(",");
for (var i = 0; i < eachIds.length; i++) {
if (eachIds[i] != id) {
if (ids == "") {
ids = eachIds[i];
} else {
ids = ids + "," + eachIds[i];
}
}
}
$("#ids").val(ids);
}
}
/**
* 修改件数
*
* @param obj
*/
function change(obj) {
var text = $("#items_" + obj).text();
var items = text.split(":");
var textQty = $("#averageQty_" + obj).text();
var qtys = textQty.split(":");
var amt = $("#amt_" + obj).text().split(":")[1];
var money = (1 * qtys[1] * amt).toFixed(2);
var textVal = $("#" + obj).val();
var dpattern = /^[0-9]*[1-9][0-9]*$/;
if (textVal != "") {
if (!dpattern.test(textVal)) {
$("#" + obj).val("1");
alert("件数是正整数 !");
$("#qty_" + obj).text(parseFloat(qtys[1]).toFixed(4));
$("#amtAll_" + obj).text(money);
return;
}
}
if (parseInt(textVal) > parseInt(items[1])) {
$("#" + obj).val("1");
alert("已超过挂牌件数,最多购买" + items[1] + "件。");
$("#qty_" + obj).text(qtys[1]);
$("#amtAll_" + obj).text(money);
} else {
var averageQty = qtys[1];
var qtyAll = (averageQty * textVal).toFixed(4);
$("#qty_" + obj).text(qtyAll);
var amtAll = (amt * qtyAll).toFixed(2);
$("#amtAll_" + obj).text(amtAll);
}
}
/**
* 显示总重量
*/
function qtyAll() {
var qtyAll = "";
var obj = document.getElementsByName("resourceId");
if (obj.length == 0) {
$("#qtyText").text("0.0000");
} else {
for (i = 0; i < obj.length; i++) {
var qty = $("#qty_" + obj[i].value).text();
if (qtyAll == "") {
qtyAll = parseFloat(qty);
} else {
qtyAll = parseFloat(qtyAll) + parseFloat(qty);
}
}
$("#qtyText").text(parseFloat(qtyAll).toFixed(4));
}
}
/**
* 显示总金额
*/
function amtAll() {
var amtAll = "";
var obj = document.getElementsByName("resourceId");
if (obj.length == 0) {
$("#amtText").text("0.00");
} else {
for (i = 0; i < obj.length; i++) {
var amt = $("#amtAll_" + obj[i].value).text();
if (amtAll == "") {
amtAll = parseFloat(amt);
} else {
amtAll = parseFloat(amtAll) + parseFloat(amt);
}
}
$("#amtText").text(parseFloat(amtAll).toFixed(2));
}
}
/**
* 提交订单
*/
function orderSub(obj) {
var ids = $("#ids").val();
if (ids == "") {
alert("没有可提交的订单!");
return;
}
var idMap = ""
var idList = ids.split(",");
for (var i = 0; i < idList.length; i++) {
var items = $("#" + idList[i]).val();
if (items == "") {
alert("件数不能为空!");
return;
}
if (idMap == "") {
idMap = "{resourceId:" + idList[i] + ",items:" + items + "}";
} else {
idMap = idMap + "," + "{resourceId:" + idList[i] + ",items:"
+ items + "}";
}
}
if (confirm("确定提交订单吗?")) {
idMap = "[" + idMap + "]";
$("input[name='resourceIds']").val(idMap);
$("#resourceForm").submit();
}
}
function deleteConOld(obj, id) {
if (confirm("确定要删除数据吗")) {
deleteCurrentRow(obj, id);
qtyAll();
amtAll();
}
}
function deleteConNew(obj, id) {
if (confirm("确定要删除数据吗")) {
newDeleteCurrentRow(obj, id);
qtyAll();
amtAll();
}
}