{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

SESSION在服务端是如何实现的?

fou7fou7 回答3 收藏1
收藏问题

3条回答

wums

wums

回答于2022-06-22 19:22

首先来说,Session存储于服务器端,由于服务器上有很多Session,如果我们要操作某个Session就需要一个标识key,在Session机制中,这个标识Key就是SessionID

其实这很好理解,举个例子:你把服务器当成一个教室,每个Session就是一个学生,如果你要找到某个学生,就需要知道这个学生的姓名。

请注意,不同WEB容器生成的SessionID名称是不同的,比如说PHP的SessionID标识名为PHPSESSID,Java容器生成的SessionID标识名为JSESSIONID。

当浏览器第一次访问服务器时,服务器端会生成一个Session(这里服务器端是可以控制Session是否自动生成的),然后将对应的SessionID存储在客户端的Cookie中,下次浏览器再发送请求时,就会将本地Cookie作为头信息传输到服务器端,服务器端获取到SessionID后就能找到与之对应的Session了。

那服务器端的Session是如何存储的呢?

服务器端的Session存储形式是不同的,主要存放形式有:

  • 内存中

  • 服务器File文件中

  • 数据库中

  • NoSQL存储等

在网站架构中,如果Session存在于内存中,这不利于集群环境下的Session共享互通,所以我们建议是将Session落地存储,最好的方式就是放在NoSQL中存储(如Redis),这样性能最优。

以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!

评论0 赞同0
  •  加载中...
songjz

songjz

回答于2022-06-22 19:22

一般都是利用cookie 中存一个sessionid

客户端第一次连接服务端的时候 服务器生成一个唯一的sessionid 同时生成这个文件来存储session的值 然后通过HTTP头域中返回这个sessionid 然后客户端拿到后写到cookie中

后面每次HTTP交互客服端都带上这个sessionid

sessionid 在服务端可以存成文件或者一个基于内存的hashtable

评论0 赞同0
  •  加载中...
cangck_X

cangck_X

回答于2022-06-22 19:22

浏览器在第一次访问网站时,会生成一个sessionid,然后写到cookie中,发回到浏览器,后续请求浏览器会自动带上这个包含sessionid的cookie,服务端接收这个sessionid,然后去查找文件名为这个sessionid的文件,文件内容就是session的具体保存东西了。明白了这个原理的话,那么就可以扩展到数据库,redis存储session的方式了,他们都是以sessionid作为键,而且session也提供了自定义方式存储,只要实现了他的接口就可以存储到其他地方了。这也看出来了一个浏览器在同一个网站上只能登录一个账号,因为登录过后会把账号信息保存到session中,而同一个浏览器同一个网站只能有一个session,所以要么销毁之前的session,生成新的,要么就用当前的。当然做的好的网站,在检测到你已经登录过的情况下,是不会允许你再次进入登录页面的,会直接给你跳转到首页。

评论0 赞同0
  •  加载中...

相关问题

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<