⑴ js中如何设置cookie的保存时间呢
设置cookie的保存时间,通过cookie的expires性质指定一个终止时间就可以了。也就是说,你在设置cookie的时候,你的cookie字串要像下面这样组合:
vard=newDate();
d.setHours(d.getHours()+(24*30));//保存一个月
document.cookie="visited=yes;expires="+d.toGMTString();
这样你的cookie就能保存一个月了,下面是我测试用的代码,你自己看看是否有其他帮助,有的话尽管拿去:
<html>
<head>
<scriptlanguage="javascript">
functionWindow_Load(){
setCookie("name","111");//临时cookie
setCookie("age","222",24*7);//保存7天
setCookie("address","333",24,"/");//保存1天,path为根目录
//设定cookie为安全的(secure=true),只能在HTTPS或与其他安全协议
//连接在一起的时候才被传输
setCookie("phone","444",24,"/",".",false);
alert(document.cookie);
alert(getCookie("age"));
//删除名称为"age"的cookie
removeCookie("age")
alert(document.cookie);
//删除名称为"address"的cookie,因为设置时设定的path,所以删除
//时也需要传入对应path
removeCookie("address","/")
alert(document.cookie);
}
functionsetCookie(name,value,hours,path,domain,secure){
varcdata=name+"="+value;
if(hours){
vard=newDate();
d.setHours(d.getHours()+hours);
cdata+=";expires="+d.toGMTString();
}
cdata+=path?(";path="+path):"";
cdata+=domain?(";domain="+domain):"";
cdata+=secure?(";secure="+secure):"";
document.cookie=cdata;
}
functiongetCookie(name){
varreg=eval("/(?:^|;\s*)"+name+"=([^=]+)(?:;|$)/");
returnreg.test(document.cookie)?RegExp.$1:"";
}
functionremoveCookie(name,path,domain){
this.setCookie(name,"",-1,path,domain);
}
</script>
</head>
<bodyonload="Window_Load();">
</body>
</html>
⑵ JS如何赋值给文本框
<script>
function ReadCookie(){
alert(getCookie("UserEmail").split(","));
}
function getCookie(objName){//获取指定名称的cookie的值
var arrStr = document.cookie.split("; ");
for(var i = 0;i < arrStr.length;i ++){
var temp = arrStr[i].split("=");
if(temp[0] == objName) return unescape(temp[1]);
}
}
var cookie_val = getCookie("UserEmail");
window.onload = ReadCookie();
</script>
<form name="addform" action="" method="get">
<input type="button" value="查看保存的COOKIES值" onclick="ReadCookie()">
<input type="text" id="txt1" value="" name="mail" onclick="ReadCookie()">
</form>
这样就能把cookie_val 的值赋给下面那个的文本框,直接显示出来
⑶ 爬今日头条,各种失败经验,之后成功了
最近研究了一下js加密,发现今日头条比较适合练手,在头条获取数据的XHR中request参数有一项_signature参数,这个是就是经过js加密的数据。解决方案在最后。
先说寻找逻辑,叫顺藤摸瓜,藤是params中的key,瓜是js函数,在哪里摸,我用的是chrome F12,全局查找,就是在网址ctrl+f,注意看结果,前面有url这种一般都是在headers之类带着没什么价值,要看出来具体数据的。
然后在preview里,格式化看得清楚,还是查找signature。
这样就成功一大半了。顺便还找到了as和cp
as: e.as,cp: e.cp,
这个e也在前面定义了var e = ascp.getHoney(),然后在搜索getHoney,就找到了。
把这段复制进pycharm的zhu.js文件里,然后新建一个python文件来运行,nodejs直接运行也行。
额,报错了,execjs._exceptions.ProgramError: ReferenceError: md5 is not defined
赶紧查了一下md5是个加密模块, nodejs安装MD5 ,然后改装了改装一下,增加了var md5 = require('md5-node');运行成功。
然后就到了signature, _signature: i,i = TAC.sign("refresh" === t ? 0 : r.params.max_behot_time_tmp))
params.max_behot_time_tmp应该是在回传的数据里的max_behot_time了。
首次请求是0,后来的是根据前一次请求的后传数据继续请求。
不知所云,但还是按照老办法试试看能不能运行。
execjs._exceptions.ProgramError: TypeError: Cannot read property 'userAgent' of undefined。
这回我参考一下 别人怎么办
原来要加useagent,
global.navigator={};
global.navigator.userAgent=
然后变成这样
调用发现又有错误:
好像说的是var data = TAC.sign(0);之前出现了一个不该出现的逗号,把它改成分号,果然成功了,
满怀欣喜的把signature,cp,as找到拼接成url发送,结果并不能返回数据。
有些忧郁的又看看别人怎么办, 用selenium获取参数 ,phantomjs不维护了,听说chrome headless可以替代之, 别人家说这么用 ,chrome还是打开窗口了,后来发现chromedriver.exe版本与chrome有严格的对应关系。 官网这样说
总算是chrome是无头的了,现在只差跟着up主把参数弄出来就行了,因为有了前面的查找,selenium执行的函数名称也很清楚,
signature = brower.execute_script('return TAC.sign(0)')
果然出来一个参数,开心的拼接url发送请求还是没数据回来。。。
忧伤的想了好久,尝试了多次,终于在手机版里发现可以不用cp和as参数,用哪里生成的signature都能拼接出结果,只是max_behot_time是藏在前一页最后一项的信息里
用requests的session或者scrapy都能连续爬取了。不过m站将返回数量20写进了js里,更改params的参数也不能控制一次的爬取量还是很是遗憾。
结果
好像必须带着cookie才能爬取后续的,不然永远都只能爬取第一页的内容,获取cookie用request的session都不行可能只能用selenium获取cookie之后再来。忧伤。。。
⑷ 关于js用cookie保存帐号和密码的安全性
加密是可以的,但是不要用js来做,因为js是客户端可以查看的,别人查看一下js代码,然后就可以从cookie里面还原密码了。
建议使用md5加密,有服务器脚本对密码md5之后,设置cookie保存在客户机浏览器里面,浏览器发送登录信息的时候,如果密码为空则严重md5密码。