session到底是何时何地生成的

 

 

关于session,之前只是在用,从没考虑到底怎么生成的

今天有空我做了个实验,把监控了一下访问某网站第一二次的请求响应详细信息,终于搞明白了,好了,开始放图

 这里发起一个请求,然后我们看下第一次请求的详细信息

 

 那么,我们开始第二次请求,第二次请求就和正常情况一样了

 

 

 


 总结:

session生成大概是,首先你发个请求去服务端,如果你的cookie里面有他之前写的session(叫什么都ok,jsessionid或者其他都行,取决于容器的实现),那么直接读取容器内存该sessionid对应的信息

如果是第一次请求,分2种情况:

1,如果服务端调用获取或设置session的方法,但是传过来的cookie里面没有(根本没cookie可传过去),那么自动生成一个session,并在响应头里面加上Set-Cookie,向浏览器申请写入cookie

2,如果服务端没有调用获取或设置session的方法,那么就不会生成并下发session,应该是为了节省网络以及服务器资源。

转载于:https://www.cnblogs.com/xiaolixun/p/8716232.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分析一下下面这段代码 switch (session->version) { case NETCONFV10: //DBG("%s/%d", __func__,__LINE__); if (nc_session_read_until (session, NC_V10_END_MSG, 0, &text, &len) != 0) { goto malformed_msg_channels_unlock; } text[len - strlen (NC_V10_END_MSG)] = 0; WARN("Received message (session %s): %s", session->session_id, text); break; case NETCONFV11: DBG("%s/%d", __func__,__LINE__); do { if (nc_session_read_until (session, "\n#", 2, NULL, NULL) != 0) { if (total_len > 0) { free (text); } goto malformed_msg_channels_unlock; } if (nc_session_read_until (session, "\n", 0, &chunk, &len) != 0) { if (total_len > 0) { free (text); } goto malformed_msg_channels_unlock; } if (strcmp (chunk, "#\n") == 0) { /* 分块框架消息结束 */ free (chunk); break; } /* 将字符串转换为以下块的大小 */ chunk_length = strtoul (chunk, (char **) NULL, 10); if (chunk_length == 0) { ERROR("Invalid frame chunk size detected, fatal error."); goto malformed_msg_channels_unlock; } free (chunk); chunk = NULL; /* 现在我们有下一个块的大小,所以阅读块 */ if (nc_session_read_len (session, chunk_length, &chunk, &len) != 0) { if (total_len > 0) { free (text); } goto malformed_msg_channels_unlock; } /* * 如果需要,Realloc生成的文本缓冲区(现在总是需要) * 不要忘记计数终止空字节 * */ if (text_size < (total_len + len + 1)) { char *tmp = realloc (text, total_len + len + 1); if (tmp == NULL) { ERROR("Memory reallocation failed (%s:%d).", __FILE__, __LINE__); free(text); goto malformed_msg_channels_unlock; } text = tmp; text[total_len] = '\0'; text_size = total_len + len + 1; } memcpy(text + total_len, chunk, len); total_len += len; text[total_len] = '\0'; free (chunk); chunk = NULL;
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值