Session原理简述_PHP教程
Session存在的意义,估计每个用做web开发的人都是了解的,就为了解决HTTP是个无状态协议所带来的问题,不多说了。这里主要想说的是服务端与客户端是如何利用session进行交互的。
Session工作的大体流程
先看下面这幅流程图:
当用户第一次访问站点时,PHP会用session_start()函数为用户创建一个session ID,这就是针对这个用户的唯一标识,每一个访问的用户都会得到一个自己独有的session ID,这个session ID会存放在响应头里的cookie中,之后发送给客户端。这样客户端就会拥有一个该站点给他的session ID。
当用户第二次访问该站点时,浏览器会带着本地存放的cookie(里面存有上次得到的session ID)随着请求一起发送到服务器,服务端接到请求后会检测是否有session ID,如果有就会找到响应的session文件,把其中的信息读取出来;如果没有就跟第一次一样再创建个新的。
通常站点的退出功能,实际上就是调用一下session_destroy()函数(也有可能更复杂些),把该用户的session文件删除,再把用户的cookie清除。这样客户端和服务端就算没有联系了。
图中的红框部分就是一次完整的HTTP请求,因为HTTP是无状态的,所以一次请求完成后客户端和服务端就不再有任何关系了,谁也不认识谁。但由于一些需要(如保持登录状态等),必须让服务端和客户端保持联系,session ID就成了这种联系的媒介了。
客户端的工作
通过上面的分析我们可以知道session实际上是依赖与cookie的,当用户访问某一站点时,浏览器会根据用户访问的站点自动搜索可用的cookie,如果有可用的就随着请求一起发送到了服务端。每次接收到服务端的响应时又会更新本地的cookie信息。
当然也可以用GET方式来传递session ID,但不推荐用GET,这样不安全。
服务端的工作
由上面的流程图可以看到,服务端实际上是把产生的一些数据存放在了session文件中,该文件的名字就是”sess“加上session ID,这些文件的存放位置就是phpinfo()查到的session.savepath值。
由上图我们可以很清楚的看到,服务端和客户端保存着同样的session ID信息,这就是两者保持联系的钥匙。
Session的反面影响
有好处必然也有坏处,session带来的最主要问题就是对性能的影响,可以想象一下,对于一个千万用户级的web站点,如果每个用户都保存 session文件,那每次用户访问光寻找相应的session文件就要耗掉不少系统资源的。所以这时就要对session的存储做一些自定义的设定了, 如分目录或哈希等等。除了保存到session文件,也可以抛弃PHP自带的session功能,自己实现session,将session信息存放到数 据库当中,这样做最好对数据库进行一下缓存的设置了,不然对上千万的数据进行太频繁的检索,也是蛮耗资源的。
Session的清除
客户端和服务端的这种联系必然是需要有时间的规定的,所以需要定期清除session。这个问题就需要在两方面考虑了,一个是清除服务端session文件,一个是清除客户端的cookie信息,因为两者都各保存着一半的信息。
PHP GC进程可以扫描session存放目录清除session文件,但这个进程是特别耗资源的,所以PHP默认是1%的几率在一个sessioin启动时去 清理一次过期的sesssion,所以并不是说一个用户session过期了,他对应的session文件就马上被清除,99%的几率是没被清除的。这就 需要我们程序员自己动手了。可以在session信息中存放一个过期时间,值为用户最后一次访问的时间。当用户一访问,就用当前时间减去上次访问时间看是 否超时,如果超时了就删除相应session文件,并设置cookie的Expires属性为负值,使其客户端的cookie信息也过期,这样浏览器就自 动把它删掉了。
PHP的相关Session常用函数
- session_start() : 启动session,这个没什么说的了。根据session ID打开session文件,如果没有session ID就创建一个ID和对应的session文件
- $SESSION[]数组 : 存放用户信息的全局数组,session文件中除了存放$SESSION中的数据实际也会存放其他的信息,如id等
- sessionunset() : 清空$SESSION数组,它是把数组里的值清空了,而$SESSION这个变量还是存在的,和unset($SESSION)是完全不同的概念
- sessioncommit() : 提交session数据并结束session,把$SESSION数据写到文件里并结束session,实际上当一个页面执行结束后,php会自动执行与这个函数相同的操作。所以这个函数也很少能用上
- session_destroy() : 注销session,这个就是关闭session并删除掉相应的session文件了。切断了客户端和服务端的联系。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

La combinaison de Vue.js et ASP.NET fournit des conseils et des suggestions pour l'optimisation des performances et l'expansion des applications Web. Avec le développement rapide des applications Web, l'optimisation des performances est devenue une tâche indispensable et importante pour les développeurs. En tant que framework frontal populaire, Vue.js combiné à ASP.NET peut nous aider à obtenir une meilleure optimisation et expansion des performances. Cet article présentera quelques conseils et suggestions, et fournira quelques exemples de code. 1. Réduire les requêtes HTTP Le nombre de requêtes HTTP affecte directement la vitesse de chargement des applications Web. passer

Comment utiliser et optimiser correctement le pool de connexions MySQL dans les programmes ASP.NET ? Introduction : MySQL est un système de gestion de bases de données largement utilisé qui offre des performances élevées, une fiabilité et une facilité d'utilisation. Dans le développement ASP.NET, l'utilisation d'une base de données MySQL pour le stockage des données est une exigence courante. Afin d'améliorer l'efficacité et les performances des connexions aux bases de données, nous devons utiliser et optimiser correctement le pool de connexions MySQL. Cet article explique comment utiliser et optimiser correctement le pool de connexions MySQL dans les programmes ASP.NET.

Traducteur | Révisé par Chen Jun | Chonglou Dans les années 1990, lorsque les gens parlaient de programmation logicielle, cela signifiait généralement choisir un éditeur, vérifier le code dans la base de code CVS ou SVN, puis compiler le code dans un fichier exécutable. Les environnements de développement intégrés (IDE) correspondants tels qu'Eclipse et Visual Studio peuvent intégrer la programmation, le développement, la documentation, la construction, les tests, le déploiement et d'autres étapes dans un cycle de vie complet de développement logiciel (SDLC), améliorant ainsi l'efficacité du travail des développeurs. Ces dernières années, les outils populaires de cloud computing et d'automatisation DevSecOps ont amélioré les capacités complètes des développeurs, permettant ainsi à un plus grand nombre d'entreprises de développer, de déployer et de maintenir plus facilement des applications logicielles. Aujourd’hui, l’IA générative est le développement de la prochaine génération

Comment se reconnecter à MySQL dans le programme ASP.NET ? Dans le développement ASP.NET, il est très courant d'utiliser la base de données MySQL. Cependant, pour des raisons de réseau ou de serveur de base de données, la connexion à la base de données peut parfois être interrompue ou expirer. Dans ce cas, afin de garantir la stabilité et la fiabilité du programme, nous devons rétablir la connexion après la déconnexion de la connexion. Cet article explique comment reconnecter les connexions MySQL dans les programmes ASP.NET. Pour référencer d'abord les espaces de noms nécessaires, référencez-les en tête du fichier de code

La combinaison de Vue.js et d'ASP.NET permet le développement et le déploiement d'applications au niveau de l'entreprise Dans le domaine technologique Internet en développement rapide actuel, le développement et le déploiement d'applications au niveau de l'entreprise sont devenus de plus en plus importants. Vue.js et ASP.NET sont deux technologies largement utilisées dans le développement front-end et back-end. Leur combinaison peut apporter de nombreux avantages au développement et au déploiement d'applications au niveau de l'entreprise. Cet article expliquera comment utiliser Vue.js et ASP.NET pour développer et déployer des applications au niveau de l'entreprise à travers des exemples de code. Tout d'abord, nous devons installer

Comment configurer et utiliser correctement le pool de connexions MySQL dans le programme ASP.NET ? Avec le développement d’Internet et l’augmentation du volume de données, la demande d’accès et de connexions aux bases de données augmente également. Afin d’améliorer les performances et la stabilité de la base de données, le pooling de connexions est devenu une technologie incontournable. Cet article explique principalement comment configurer et utiliser correctement le pool de connexions MySQL dans les programmes ASP.NET pour améliorer l'efficacité et la vitesse de réponse de la base de données. 1. Le concept et la fonction du pooling de connexions Le pooling de connexions est une technologie qui réutilise les connexions de bases de données. Elle est utilisée au début du programme.

Les objets intégrés dans ASP.NET incluent "Request", "Response", "Session", "Server", "Application", "HttpContext", "Cache", "Trace", "Cookie" et "Server.MapPath" : 1. Requête, indiquant la requête HTTP émise par le client 2. Réponse : indiquant la réponse HTTP renvoyée par le serveur web au client ; client, etc

Présentation de la configuration recommandée pour l'utilisation de Visual Studio pour le développement ASP.NET sous Linux : Avec le développement de logiciels open source et la popularité du système d'exploitation Linux, de plus en plus de développeurs commencent à développer ASP.NET sous Linux. En tant qu'outil de développement puissant, Visual Studio a toujours occupé une position dominante sur la plateforme Windows. Cet article explique comment configurer VisualStudio pour ASP.NE sous Linux.
