第一我们是一个前后端分离的项目,就不可能使用同一个session了,那么我们将session不传给后台,给前端。我们登陆成功后通过ajax将值返回给页面,用js再次保存下就可以了。
$usernam = session( 'username', $name );
//session赋值
$userid = session( 'userid', $sid );
//session赋值
$user = array( 1, session( 'username' ), session( 'userid' ) );
return json( $user );
这样将值返回给页面就行了了。
前端ajax代码
success: function( data ) {
console.log( data );
if ( data == '1' ) {
mui.toast( '登录成功', {
duration: 'long',
type: 'div'
}
);
var user = data[1];
//下标1为用户名字
var id = data[2];
//下标2为用户的id
localStorage.setItem( 'username', user );
localStorage.setItem( 'userid', id );
}
最后存入js 然后我们读取为
//读取为
var username = localStorage.getItem('username');
//删除某个键值对
localStorage.removeItem('uid');
//清除localStorage的所有内容
localStorage.clear();
我们将配置文件中的session进行更改
id=1,就可以了。这个有问题的,只能获取一个用户,比如两台机子登录不同用户,两台机子同时刷新,那么就会为一个用户了。
//session
'session' => [
'id' => '1',
// SESSION_ID的提交变量,解决flash上传跨域
'var_session_id' => '',
// SESSION 前缀
'prefix' => 'think',
// 驱动方式 支持redis memcache memcached
'type' => '',
// 是否自动开启 SESSION
'auto_start' => true,
'use_trans_sid' => true,
],
ajax后台控制器
<?php
namespace app\api\controller;
use think\Session;
use think\Controller;
header("Access-Control-Allow-Origin: *"); //解决跨域
class Indexhome extends Controller {
public function index() {
if(!Session::has('username'))
{
return "1";
}
$username = session('username');
return json($username);
}
ajax前端
<script type="text/javascript">
$(function() {
$.ajax({
type: 'POST',
url: "http://tp5-expert.likeball.top/api/Indexhome/index",
dataType: 'json',
success: function(data) {
console.log(data);
if(data == "1") {
alert("你还未进行登录");
location.href = 'http://thinkphp5-expert-page.likeball.top/index.html';
}
},
error: function(error) {
console.log('error');
}
});
})
</script>