如果需要两个cookie发往客服端,需要的代码是

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果需要两个cookie发往客服端,需要的代码是相关的知识,希望对你有一定的参考价值。

CSDN的登录界面下会有“两周内不再登录”选项,用户登录后会保存用户登录信息,第二次登录时自动补全登录密码

二、过程

1、当客户端发送一个请求的时候,会产生一个request对象,这个对象里面就包含了cookie
2、服务端先设置cookie信息,并在客户端请求时把这个cookie信息发送给客户端,客户端会自动保存cookie的key/value值
3、下次向服务端发送请求时,客户端会自动带上cookie信息,服务端会根据cookie信息来识别状态。(之前是否访问过)
4、简单说就是在客户端,保存一串加密后的字符串,下次用户访问时,获取这个加密串进行解密匹配,然后创建登录Session信息。

三、定义

cookie用来给无状态的http请求增添状态标记,供服务端辨识,也称客户端缓存.
服务端和客户端的cookie是同一个东西,都是保存在浏览器的,服务端常用的方式是存在session里

http 是一种无状态协议,浏览器请求服务器是无状态的
无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。
无状态原因:浏览器与服务器是使用 socket 套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的 socket 连接,而且服务器也会在处理页面完毕之后销毁页面对象
cookie的结构

key:cookie的名称
value:cookie的值
expires:cookie的失效日期(UTC时间字符串)
max-age:cookie的失效间隔(秒),优先级高于expires
path:根据目录限制cookie的分享,如不主动设置,默认为当前页面的路径
domain:根据域名限制cookie的分享

cookie的分类

一、客户端

可以设置、更改、删除cookie

function getCookie(name)
var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
if (arr = document.cookie.match(reg))
return (arr[2]);
else
return null;


function setCookie (c_name, value, expiredays)
var exdate = new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
;

function delCookie (name)
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval = getCookie(name);
if (cval != null)
document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
以用户登录为例,可以存用户登录的用户名和密码(或者代表用户信息的其他格式)
当下次访问网页的时候,直接读取这些信息,发送到服务端去进行验证

二、 服务端

express可以利用第三方组件cookie-parser去进行解析客户端来的req.cookies,也可以在返回信息给客户端的时候设置cookie,这样客户端在接受到这些信息的时候,就会将cookie信息自动保存到硬盘cookie里面,跟在客户端自己保存一样,不过要在客户端和服务器端做一下特殊的设置。

// express
var express = require('express');
var cookieParser = require('cookie-parser');

var app = express();
app.use(cors(
//credentials: true,//如果需要跨域那么需要设置这两个属性,表示服务器端接受这个域来的信息
//origin: 'http://localhost:8080'
))
app.use(cookieParser());

app.get('/', function (req, res)
// 检查 session 中的 isVisit 字段是否存在
// 如果存在则增加一次,否则为 session 设置 isVisit 字段,并初始化为 1。
if (req.cookie.isVisit)
req.cookie.isVisit++;
res.send('<p>第 ' + req.cookie.isVisit + '次来此页面</p>');
else
req.cookie.isVisit = 1;
res.send("欢迎第一次来这里");
console.log("Cookies: ", req.cookies); //打印cookie

);
app.listen(80);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
在进行这些初始化之后就可以进行调用函数进行设置/清除cookies

//node, express
app.get('/test', function(req, res, next)
res.cookie(key,value,
maxAge:1000,//毫秒为单位,
//domain
//path
httpOnly:boolean,//设置为true,客户端无法查看、更改,仅作为发送至服务端的凭据
)
//不设置表示无期限
res.cookie(key,value)
)
//res.cookie(name, value [, options]); //设置cookies, options可以设置很多参数。
//res.clearCookie(name [, options]); //清除cookies,
1
2
3
4
5
6
7
8
9
10
11
12
13
当然服务端读取cookie的时候,直接利用req.cookies或者req.signedCookies来读取参数信息

但是一般情况下服务端的cookie存放在session来处理。来个示例:

//session
var express = require('express');
var session = require('express-session');
var app = express();

app.use(session(
secret: 'zsshua app', //secret的值建议使用随机字符串
cookie: maxAge: 60 * 1000 * 30 // 过期时间(毫秒)
));
app.get('/', function (req, res)
if (req.session.sign) //检查用户是否已经登录
console.log(req.session);//打印session的值
res.send('welecome <strong>' + req.session.name + '</strong>, 欢迎你再次登录');
else //否则展示index页面
req.session.sign = true;
req.session.name = '我的网站';
res.end('欢迎登录!');

);
app.listen(80);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
express

//app.js中添加如下代码(已有的不用添加)
var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');

app.use(cookieParser('sessiontest'));
app.use(session(
secret: 'sessiontest',//与cookieParser中的一致
resave: true,
saveUninitialized:true
));
1
2
3
4
5
6
7
8
9
10
11
//修改router/index.js,第一次请求时我们保存一条用户信息。
router.get('/', function(req, res, next)
var user=
name:"Chen-xy",
age:"22",
address:"bj"

req.session.user=user;
res.render('index',
title: 'the test for nodejs session' ,
name:'sessiontest'
);
);
1
2
3
4
5
6
7
8
9
10
11
12
13
//修改router/users.js,判断用户是否登陆。
router.get('/', function(req, res, next)
if(req.session.user)
var user=req.session.user;
var name=user.name;
res.send('你好'+name+',欢迎来到我的网站。');
else
参考技术A 可以使用以下代码:

response.setHeader("Set-Cookie", "cookie1=value1; Max-Age=3600");
response.setHeader("Set-Cookie", "cookie2=value2; Max-Age=3600");
上述代码中,第一行设置了一个名为"cookie1",值为"value1"的Cookie,有效期为1小时(3600秒)。第二行设置了一个名为"cookie2",值为"value2"的Cookie,有效期也为1小时。

注意,上述代码假设你使用的是Java作为服务器端编程语言,并且你已经获取了HttpServletResponse对象。如果你使用的是其他语言或框架,发送Cookie的方法可能会有所不同。
参考技术B 是Cookie。
1、Cookie是一个小的文本数据,有服务器端生成,发送给客户端浏览器。

2、客户端浏览器如果设置为启用Cookie,则会将这个小文本数据保存到某个目录下的文本文件内。

3、下次登录同一页面,浏览器则会自动将Cookie传回服务器端。

4、Cookie值的形式:key-value。
参考技术C 、当客户端发送一个请求的时候,会产生一个request对象,这个对象里面就包含了cookie
2、服务端先设置cookie信息,并在客户端请求时把这个cookie信息发送给客户端,客户端会自动保存cookie的key/value值
3、下次向服务端发送请求时,客户端会自动带上cookie信息,服务端会根据cookie信息来识别状态。(之前是否访问过)
4、简单说就是在客户端,保存一串加密后的字符串,下次用户访问时,获取这个加密串进行解密匹配,然后创建登录Session信息。

axis2的wsdl2java命令可以生成wsdl的服务端和客服端代码,请问各位大牛这个客服端和服务端的有啥区别。

还有...如果我自己写代码调用wsdl2java命令生成的代码,是调用生成的服务端代码还是客服端代码呢???

生成的服务端是你本机作为服务的提供者;生成客户端是为了你去调用服务端提供的服务。
如果你想调用服务的话,当然是用生成的客户端代码了。追问

”生成的服务端是你本机作为服务的提供者“,,这句话是什么意思,能更详细点嘛

追答

通过现有的服务的wsdl文件生成服务端,可以在本机生成服务端,可以改写或重构此服务端的代码,也可以在本地发布服务,这样可以防止不同语言一些特定的数据类型的不兼容性,先定义WSDL接口,包括一输入输出参数、返回值及相关的数据类型等,再通过WSDL来生成服务器端和客户端,这样的好处是:服务端不用关心客户端怎么调用,客户端也不用关系服务端如何实现。

参考技术A axis2的wsdl2java命令生成的客户端代理类就像是客户端的配置文件(根服务端相关),这个代理类可以完成的功能是你调用这个代理类中的方法就像是远程请求服务一样,axis2有两个转换代码工具wsdl2java和java2wsdl,wsdl2java是把服务端发布的wsdl转换为java代码 ,wsdl2java的作用反之。 参考技术B wsdl通常是由接口提供商生成的,也就是说服务端代码在提供商那。

自己通过wsdl2java命令可生成服务端与客户端的代码,但是服务端中的代码只包含接口定义,没有代码实现.测试的时候可以自己实现,只需要保证数据能正确传输就行了。

以上是关于如果需要两个cookie发往客服端,需要的代码是的主要内容,如果未能解决你的问题,请参考以下文章

js怎样获取session值 在登录页面中

pymongo的基本操作和使用--练习

spring boot cookie和session的区别

jwt token

axis2的wsdl2java命令可以生成wsdl的服务端和客服端代码,请问各位大牛这个客服端和服务端的有啥区别。

Cookie&Session(会话技术)