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文件了。切断了客户端和服务端的联系。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Gabungan Vue.js dan ASP.NET menyediakan petua dan cadangan untuk pengoptimuman prestasi dan pengembangan aplikasi web Dengan perkembangan pesat aplikasi web, pengoptimuman prestasi telah menjadi tugas yang sangat diperlukan dan penting untuk pembangun. Sebagai rangka kerja bahagian hadapan yang popular, Vue.js digabungkan dengan ASP.NET boleh membantu kami mencapai pengoptimuman dan pengembangan prestasi yang lebih baik. Artikel ini akan memperkenalkan beberapa petua dan cadangan, serta memberikan beberapa contoh kod. 1. Kurangkan permintaan HTTP Bilangan permintaan HTTP secara langsung mempengaruhi kelajuan pemuatan aplikasi web. lulus

Penterjemah |. Disemak oleh Chen Jun |. Pada tahun 1990-an, apabila orang menyebut pengaturcaraan perisian, ia biasanya bermaksud memilih editor, menyemak kod ke dalam pangkalan kod CVS atau SVN, dan kemudian menyusun kod ke dalam fail boleh laku. Persekitaran pembangunan bersepadu (IDE) yang sepadan seperti Eclipse dan Visual Studio boleh menyepadukan pengaturcaraan, pembangunan, dokumentasi, pembinaan, ujian, penggunaan dan langkah-langkah lain ke dalam kitaran hayat pembangunan perisian yang lengkap (SDLC), sekali gus meningkatkan kecekapan pemaju. Dalam tahun-tahun kebelakangan ini, pengkomputeran awan yang popular dan alat automasi DevSecOps telah meningkatkan keupayaan komprehensif pembangun, menjadikannya lebih mudah bagi lebih banyak perusahaan untuk membangun, menggunakan dan menyelenggara aplikasi perisian. Hari ini, AI generatif ialah pembangunan generasi akan datang

Bagaimana untuk menggunakan dan mengoptimumkan kolam sambungan MySQL dengan betul dalam program ASP.NET? Pengenalan: MySQL ialah sistem pengurusan pangkalan data yang digunakan secara meluas yang menampilkan prestasi tinggi, kebolehpercayaan dan kemudahan penggunaan. Dalam pembangunan ASP.NET, menggunakan pangkalan data MySQL untuk penyimpanan data adalah keperluan biasa. Untuk meningkatkan kecekapan dan prestasi sambungan pangkalan data, kami perlu menggunakan dan mengoptimumkan kumpulan sambungan MySQL dengan betul. Artikel ini akan memperkenalkan cara menggunakan dan mengoptimumkan kumpulan sambungan MySQL dengan betul dalam program ASP.NET.

Bagaimana untuk menyambung semula ke MySQL dalam program ASP.NET? Dalam pembangunan ASP.NET, adalah sangat biasa untuk menggunakan pangkalan data MySQL. Walau bagaimanapun, disebabkan oleh sebab rangkaian atau pelayan pangkalan data, sambungan pangkalan data kadangkala mungkin terganggu atau tamat masa. Dalam kes ini, untuk memastikan kestabilan dan kebolehpercayaan program, kami perlu mewujudkan semula sambungan selepas sambungan diputuskan. Artikel ini akan memperkenalkan cara menyambung semula sambungan MySQL dalam program ASP.NET. Untuk merujuk ruang nama yang diperlukan terlebih dahulu, rujuknya di kepala fail kod

Gabungan Vue.js dan ASP.NET membolehkan pembangunan dan penggunaan aplikasi peringkat perusahaan Dalam bidang teknologi Internet yang pesat membangun hari ini, pembangunan dan penggunaan aplikasi peringkat perusahaan telah menjadi semakin penting. Vue.js dan ASP.NET ialah dua teknologi yang digunakan secara meluas dalam pembangunan bahagian hadapan dan belakang. Menggabungkannya boleh membawa banyak kelebihan kepada pembangunan dan penggunaan aplikasi peringkat perusahaan. Artikel ini akan memperkenalkan cara menggunakan Vue.js dan ASP.NET untuk membangunkan dan menggunakan aplikasi peringkat perusahaan melalui contoh kod. Pertama, kita perlu memasang

Bagaimana untuk mengkonfigurasi dan menggunakan kolam sambungan MySQL dengan betul dalam program ASP.NET? Dengan perkembangan Internet dan peningkatan jumlah data, permintaan untuk capaian pangkalan data dan sambungan juga meningkat. Untuk meningkatkan prestasi dan kestabilan pangkalan data, pengumpulan sambungan telah menjadi teknologi penting. Artikel ini terutamanya memperkenalkan cara mengkonfigurasi dan menggunakan kumpulan sambungan MySQL dengan betul dalam program ASP.NET untuk meningkatkan kecekapan dan kelajuan tindak balas pangkalan data. 1. Konsep dan fungsi penyatuan sambungan adalah teknologi yang menggunakan semula sambungan pangkalan data. Ia digunakan pada permulaan program.

Bagaimana untuk menggunakan dan mengoptimumkan prestasi transaksi kumpulan sambungan MySQL dengan betul dalam program ASP.NET? Dalam program ASP.NET, transaksi pangkalan data adalah bahagian yang sangat penting. Transaksi memastikan ketekalan dan integriti pangkalan data di samping memberikan prestasi yang lebih baik. Apabila menggunakan pangkalan data MySQL, adalah penting untuk menggunakan kumpulan sambungan untuk mengurus sumber sambungan dan mengoptimumkan prestasi. Mula-mula, mari kita fahami secara ringkas konsep kumpulan sambungan MySQL. Kolam sambungan ialah kumpulan penimbal bagi sekumpulan sambungan Dengan pra-memulakan bilangan tertentu

Objek terbina dalam ASP.NET termasuk "Permintaan", "Respons", "Sesi", "Pelayan", "Aplikasi", "HttpContext", "Cache", "Trace", "Cookie" dan "Server.MapPath": 1. Permintaan, menunjukkan permintaan HTTP yang dikeluarkan oleh klien 2. Respons: menunjukkan respons HTTP yang dikembalikan oleh pelayan web kepada pelanggan, dsb.
