当前位置: 首页 > 后端技术 > PHP

session理解

时间:2023-03-30 00:54:53 PHP

session理解还是那句话。...新手在路上。.大神欢迎指教1.session的概念什么是session?什么是cookie?这些都是老问题了。.做过相关开发的基本都知道。.但是我还是不太明白。这两个东西在google下不难理解。.那我这里就不讨论这个问题了。.2、说说cookie和session的关系。说说我的理解:虽然cookie和session的解决方案分别属于客户端和服务端,但是服务端的session的实现依赖于客户端的cookie;大致步骤如下:服务器执行Session机制,生成对应的唯一session_id(服务器通过解析处理session_id,可以找到session保存的文件;然后从文件中提取session信息)服务器将将session_id发送给客户端client客户端收到session_id,保存在cookie中作为存储容器。客户端每次请求都会把这个session_id带到服务端。服务器自行解析会话。注意:session中保存信息的方式有很多种:缓存、数据库、文件等;但默认是以文件形式保存。..问:禁用cookie后session还能用吗?app真的不能用session吗?为了探讨以上问题。.我们先来看看session创建和销毁的时机。.3、创建session时和销毁session创建session时,会创建一个cookie,其MaxAge为-1,表示只能存在于内存中。当在浏览器端禁用cookie时,仍会创建此cookie。当浏览器提交的请求中有jsessionid参数或者cookie头时,容器不再创建新的session,而是只找之前的session进行关联。这里有两种情况:1)使用jsessionid。如果该值可以对应到已有的session,则不会创建新的session,否则,仍然会创建一个新的session。2)使用cookie。如果该值可以对应到已有的session,则不会创建新的session;但是如果没有对应的session(就像上面重启服务器后),容器会根据cookie信息恢复对应的session,就好像之前一样。什么时候销毁会话?当我们关闭浏览器,再次打开,连接到服务器时,服务器会分配一个新的session,也就是说,会启动一个新的session。那么原来的session是不是被销毁了?我做了一个小实验:创建一个会话://开始会话初始化session_start();//注册会话变量,并赋值$_SESSION["username"]="hello"//输出生成的session_idechosession_id();访问页面创建session,获取session_id,关闭浏览器;根据上面输出的session_id//session_id$session_id="qpk6onnn3husvotnke030ftcm4"创建一个session对象;session_id($session_id);session_start();echo$_SESSION["username"];result可以把"hello"取出来,所以我们可以看到当浏览器关闭时,原来的session并没有被销毁(没有执行destroy方法),而是直到超时后session才被销毁。关闭浏览器只会清除客户端内存中与原始会话相关的cookie。当再次打开浏览器连接时,浏览器无法发送cookie信息,服务器会认为这是一个新的会话。因此,如果关闭浏览器时有某些与session相关的资源需要清理(如临时文件等),应该向服务器发送特定的请求,而不是等待session自动清理清理干净。4.回归问题。.其实我的理解很简单(不对的地方请指出)。.只要有session_id,就可以查到session。..Cookie是一种保存唯一标识(session_id)的手段;禁用cookies或完全不支持cookies,但通过其他方式也可以实现cookies所实??现的功能。服务器只要有session_id,还是可以找到对应的session的;只是session机制,内部通过cookie自动实现。..如果不使用cookie,则必须自己实现逻辑。..感觉有点不对劲,但是猪肉变质了,还是猪肉。..这取决于你怎么看了。..