PHP中单点登录的会话控制
这篇文章主要介绍了关于PHP中单点登录的会话控制,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
1、简单使用下session
在使用session之前需要session_start()开启session
写一个Demo来实现下
新建一个session.php
<?php session_start(); //使用时必须开启,如果你在php.ini里头修改了配置那么就无需在开启session了 $_SESSION['username'] = 'admin'; //存储session信息为键为username值为admin的一对数据 ?>
再新建一个getsession.php我们来取一下值
<?php session_start(); //使用时必须开启,如果你在php.ini里头修改了配置那么就无需在开启session了 echo $_SESSION['username']; //取出在session里存的username的值 ?>
不同浏览器取到的值是不同的,原因是因为它们的sessionid不同,举个栗子:
我用Google浏览器访问session.php然后生成了一个session,那么我用同一浏览器访问getsession.php的话是可以取到值的,当我用Firefox浏览器再次访问session.php的时候又重新生成了一个session,再次访问getsession.php也是可以取到值的,但是你会发现取到的不是同一个值,因为它们是两个浏览器有不同的sessionID,如果你把Firefox的sessionID拿过来把Google的sessionID进行修改,那么你会发现它们两个的值是一样的,因为session取值只认sessionID。
童鞋们可以试着操作一下,看是不是这个样子的。
2、跨域
如果我们在自己的Apache/nginx服务器上配置自己的虚拟主机。
我的是Apache服务器,nginx也是修改配置文件----vhost.conf。
<VirtualHost *:80> DocumentRoot "H:\myphp_www\PHPTutorial\WWW\sessoin" ServerName www.test.com ServerAlias <Directory "H:\myphp_www\PHPTutorial\WWW\sessoin"> Options FollowSymLinks ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted </Directory> </VirtualHost>
一个虚拟域名为www.test.com的虚拟主机就搭建好了,切记一定要重启Apache/nginx,否则配置不生效。
我们现在要做的就是要把两个域名下的sessionID保持一致,例如:www.test.com和localhost,前提是在一服务器下。
下面我们来写一个Demo实现一下(先不考虑安全和性能)
创建一个user.php我们要把当前localhost下的sessionID传到www.test.com
<?php session_start(); //一定要先开启session $sid = session_id(); //获取到当前的sessionID ?> <a href="http://www.test.com/getsession.php?sid= <?php echo $sid;?> ">跳转</a>
直接页面上的跳转的话是会出错的,因为我们只传输了,getsession.php并没有接收,所以我们要修改getsession.php文件
<?php if (isset($_GET['sid'])){ //setcookie('名字','值','有效期','域名'); $sid = $_GET['sid']; //setcookie('PHPSESSID' , $sid); //设置sessionID //或者我们还可以用另一种方式 session_id($sid); //开启session之前 指定一个sessionid } session_start(); echo $_SESSION['username']; ?>
这样我们就根据sessionID的一致性解决了两个域名之间的跨域问题
3、实现单点登录----意为在localhost下登录后在www.test.com下同步登陆-----跨域请求
使用ajax的话是不能实现跨域请求的,需要使用Jsonp来进行跨域
在session文件夹同级目录下创建一个local文件来更好的区分两个域
我们现在要实现的就是让localhost和www.test.com进行互通-----前提是在一个服务器上
在session下创建一个api.php
<?php ?>
在local下创建一个index.html
<script src="www.test.com/api.php"></script> <!-- JS代码在浏览器端执行 -->
在访问local下index.html的时候它会发起两个请求 因为里头的js代码请求了一下www.test.com/api.php
修改session下的getsession.php文件为以下内容:
<?php session_start(); if(isset($_SESSION['uid'])){ echo "用户已登录,id是".$_SESSION['uid']; } else { echo "没有登录"; } ?>
复制一份session下的getsession.php到local下
在local下创建一个login.php文件
<?php session_start(); $_SESSION['uid'] = 18; //存储session数据键为uid值为18的一对数据 ?>
当我们访问login.php后在访问当前目录下的getsession.php文件,结果为:用户已登录,id是18.
那么我们现在要做到的就是在localhost下访问login.php进行登录的时候悄悄的也让www.test.com进行登录
修改local下login.php文件为以下代码:
<?php session_start(); $_SESSION['uid'] = 18; //存储session数据键为uid值为18的一对数据 $uid = $_SESSION['uid']; ?> <script src="www.test.com/api.php?uid=<?php echo $uid;?>" ></script>
访问localhost/local/login.php来进行同步登陆,然后在访问localhost/local/getsession.php已经是登录状态了
现在直接访问www.test.com/getsession.php文件是不会发生任何改变的,因为我们并没有接收session,所以要修改session下api.php文件为以下代码:
<?php session_start(); $uid = $_GET['uid']; $_SESSION['uid'] = $uid; ?>
这样的话在访问www.test.com/getsession.php的时候也会同样提示已登录
这样我们就使用了Jsonp实现了跨域请求,在登录一个网站的情况下另一个网站同步登陆
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
如何解决vue+mui中mui-silder插件失效了不能拖拽的问题
Atas ialah kandungan terperinci PHP中单点登录的会话控制. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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



Masalah ditemui dalam masa tamat masa pengeluaran projek springboot Masalahnya diterangkan di bawah: Dalam persekitaran ujian, sesi keluar telah dikonfigurasikan dengan menukar aplikasi.yaml Selepas menetapkan masa yang berbeza untuk mengesahkan bahawa konfigurasi keluar sesi berkuat kuasa, masa tamat tempoh ditetapkan terus kepada 8 jam untuk dilepaskan. Walau bagaimanapun, saya menerima maklum balas daripada pelanggan pada waktu tengah hari bahawa masa tamat projek ditetapkan menjadi singkat Jika tiada operasi dilakukan selama setengah jam, sesi akan tamat tempoh dan memerlukan log masuk berulang. Selesaikan masalah pengendalian persekitaran pembangunan: projek springboot mempunyai Tomcat terbina dalam, jadi sesi keluar yang dikonfigurasikan dalam application.yaml dalam projek adalah berkesan. Persekitaran pengeluaran: Keluaran persekitaran pengeluaran ialah

Kegagalan sesi biasanya disebabkan oleh tamat tempoh seumur hidup sesi atau penutupan pelayan. Penyelesaian: 1. Memanjangkan hayat sesi; 2. Gunakan storan berterusan;

Penyelesaian kepada masalah silang domain PHPSession Dalam pembangunan pemisahan front-end dan back-end, permintaan merentas domain telah menjadi kebiasaan. Apabila menangani isu merentas domain, kami biasanya melibatkan penggunaan dan pengurusan sesi. Walau bagaimanapun, disebabkan oleh sekatan dasar asal penyemak imbas, sesi tidak boleh dikongsi secara lalai merentas domain. Untuk menyelesaikan masalah ini, kita perlu menggunakan beberapa teknik dan kaedah untuk mencapai perkongsian sesi merentas domain. 1. Penggunaan kuki yang paling biasa untuk berkongsi sesi merentas domain

Penyelesaian kepada masalah bahawa sesi php hilang selepas menyegarkan: 1. Buka sesi melalui "session_start();" 2. Tulis semua konfigurasi awam dalam fail php 3. Nama pembolehubah tidak boleh sama dengan subskrip tatasusunan; 4. Dalam Hanya semak laluan penyimpanan data sesi dalam phpinfo dan semak sama ada sesio dalam direktori fail berjaya disimpan.

Masa tamat lalai PHP sesi ialah 1440 saat, iaitu 24 minit, yang bermaksud bahawa jika pelanggan tidak memuat semula selama lebih daripada 24 minit, sesi semasa akan tamat tempoh jika pengguna menutup penyemak imbas, sesi akan tamat dan Sesi tidak akan wujud lagi.

Masalah: Hari ini, kami menghadapi masalah tamat masa tetapan dalam projek kami dan perubahan pada application.properties SpringBoot2 tidak pernah berkuat kuasa. Penyelesaian: Pelayan.* sifat digunakan untuk mengawal bekas terbenam yang digunakan oleh SpringBoot. SpringBoot akan mencipta contoh bekas servlet menggunakan salah satu contoh ServletWebServerFactory. Kelas ini menggunakan sifat pelayan.* untuk mengkonfigurasi bekas servlet terkawal (tomcat, jeti, dsb.). Apabila aplikasi digunakan sebagai fail perang kepada contoh Tomcat, pelayan.* sifat tidak digunakan. Mereka tidak memohon,

1. Melaksanakan log masuk SMS berdasarkan sesi 1.1 Carta alir log masuk SMS 1.2 Melaksanakan penghantaran kod pengesahan SMS Perihalan permintaan hujung hadapan: Penerangan kaedah permintaan POST laluan permintaan/pengguna/kod parameter permintaan telefon (nombor telefon) nilai pulangan Tiada antara muka belakang pelaksanaan: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){/1

JavaScriptCookies Menggunakan kuki JavaScript ialah cara paling berkesan untuk mengingati dan menjejaki keutamaan, pembelian, komisen dan maklumat lain. Maklumat diperlukan untuk pengalaman pelawat yang lebih baik atau statistik tapak web. PHPCookieCookies ialah fail teks yang disimpan pada komputer pelanggan dan disimpan untuk tujuan penjejakan. PHP secara telus menyokong kuki HTTP. Bagaimanakah kuki JavaScript berfungsi? Pelayan anda menghantar beberapa data ke penyemak imbas pelawat anda dalam bentuk kuki. Pelayar boleh menerima kuki. Jika ada, ia akan disimpan pada pemacu keras pelawat sebagai rekod teks biasa. Sekarang, apabila pelawat mencapai halaman lain di tapak
