php 如何做保持登入 有关安全方面的详细说下
现在自己的网站用的都是session,但这样浏览器一关了登入状态就没了,很不方便
怎么做【保持登入】功能,关于cookie方面的安全怎么做最好详细讲下,网上也没有具体的方案,希望有开发经验的人指导下
回复内容:
现在自己的网站用的都是session,但这样浏览器一关了登入状态就没了,很不方便
怎么做【保持登入】功能,关于cookie方面的安全怎么做最好详细讲下,网上也没有具体的方案,希望有开发经验的人指导下
需要说明的是,PHP的session也是用cookie实现的,保存在浏览器的cookie名称默认为PHPSESSID.
这个session的cookie也是可以设置过期时间的,比如过期时间设置为3600秒:session_set_cookie_params(3600);
这样关闭浏览器后在一小时内重新打开这个cookie依旧有效.
PHP session是每一个PHPSESSID默认对应一个保存会话数据的文件.
也就是说不同的PHPSESSID的会话数据是不共享的.
比如你用PHP session实现一个购物车或者视频观看记录的功能,
你把购物车的数据保存在会话文件里,那你在其他设备或浏览器登录后是看不到你的购物车数据的.
这时你应该把购物车数据保存在数据库里.
下面说说自己怎么基于数据库实现一套自定义的cookie会话机制:
cookie里存储用户ID(明文)和用户的盐值(哈希).
需要高安全性的话,还可以用MCRYPT_BLOWFISH对整个cookie的内容做一次加密.
这个cookie既要做到可以认证用户,又要做到不能被伪造.
用户的盐值是在用户注册时,为了保护密码,而随机生成并确定下来,保存在用户表里对应用户的一个字段数据.
<code>//保护用户密码的盐 $salt = sha1( uniqid(getmypid().'_'.mt_rand().'_', true) ); //用户的密码($pwd_user是用户输入的密码明文) $pwd_db = sha1($salt.sha1($pwd_user)); //cookie里的盐 //其中$global_salt是配置里定义的全局盐,用来保护用户的盐,一旦修改,所有用户的cookie都将失效. $cookie_salt = sha1($global_salt.sha1($salt)); //最终生成的cookie内容 $cookie = base64_encode($user_id.'|'.$cookie_salt); //如果你需要高安全性,还可以使用MCRYPT_BLOWFISH对整个cookie的内容做一次加密. $cookie = mcrypt_blowfish($cookie, $key); //设置cookie,这里把过期时间设为3600秒(1小时) setcookie($cookie_name, $cookie, time()+3600);</code>
其中用户的盐,应用全局的盐,以及MCRYPT_BLOWFISH加密的密钥$key,都是随机生成并确定下来的.
算法比如:sha1( uniqid(getmypid().'_'.mt_rand().'_', true) )
生成的是一个进程ID+随机数+基于当前时间微秒数+熵的一个哈希值.
验证用户的时候就是先用私钥解密$_COOKIE['cookie_name'],
然后base64_decode拿到用户ID,
然后根据用户ID查询用户的盐,
然后把这个盐经过同样的哈希算法后跟cookie里的盐$cookie_salt对比,
如果一致,则判定用户的cookie有效.
<code>//解密cookie $cookie = mdecrypt_blowfish($_COOKIE['cookie_name'], $key); //分割后拿到里面的$user_id和$cookie_salt $cookie = explode('|', base64_decode($_COOKIE['cookie_name']));</code>
设置cookie有效期,比如当前时间加一个星期,这样就算关闭浏览器也要一个月过期
cookie内容可以对userId进行对称加密,后端先拿到密文,然后解密,最后登录
只操作cookie还是解决不了session过期的问题啊,建议用个缓存
(果然是上瘾药),把session放进去好了,过期时间随便你设置,检查是否在线时直接去缓存内检测;
好像php.ini
可以设置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



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Bekerja dengan pangkalan data dalam CakePHP adalah sangat mudah. Kami akan memahami operasi CRUD (Buat, Baca, Kemas Kini, Padam) dalam bab ini.

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Log masuk CakePHP adalah tugas yang sangat mudah. Anda hanya perlu menggunakan satu fungsi. Anda boleh log ralat, pengecualian, aktiviti pengguna, tindakan yang diambil oleh pengguna, untuk sebarang proses latar belakang seperti cronjob. Mengelog data dalam CakePHP adalah mudah. Fungsi log() disediakan

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c
