Laravel8.x实现跨站登录

作者: 温新

分类: 【Laravel】

阅读: 1642

时间: 2021-11-14 11:55:45

如有一个系统A,系统A下有很多子系统,共享用户信息,在子系统中登录了,其他系统不要再次进行登录。除了跨站登录外,还有单点登录也可以实现。今天学习的是跨站登录,记录一下。

第一步:创建两个项目,分别为主系统和子系统

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 主系统</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">composer</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">create</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">project</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">laravel</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">laravel</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">demo</span>.<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">com</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 子系统</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">composer</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">create</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">-</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">project</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">laravel</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">laravel</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">sub</span>.<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">demo</span>.<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">com</span></span>

第二步:配置域名

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># demo.com 主系统域名(顶级域名)</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">demo</span>.<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">com</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># sub.demo.com 子系统域名(二级域名)</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">sub</span>.<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">demo</span>.<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">com</span></span>

第三步:创建数据库并修改 .env文件连接数据库

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># demo.com 主系统数据库名</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2021</span>_demo</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># sub.demo.com 子系统数据库名</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2021</span>_sub_demo</span>

主系统和子系统分别在.env文件中配置对应的数据库

第四步:使用迁移文件生成数据表

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># demo.com 主系统 && sub.demo.com</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 两个系统中都要执行这个命令</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">php</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">artisan</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">migrate</span></span>

第五步:主系统和子系统引入脚手架

主系统和子系统都要执行如下操作

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">composer</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">require</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">laravel</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">ui</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">php</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">artisan</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">ui</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">bootstrap</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">--</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">auth</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">npm</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">install</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">npm</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">run</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">dev</span></span>

安装完成后在浏览器中分别访问主系统demo.com和子系统sub.demo.com就能在右上角看到Log inRegister

第六步:配置sub.demo.com子系统

1)配置sub.demo.com子系统数据库连接到主系统

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 位置:sub.demo.com 子系统</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// config/database.php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'connections'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> [</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 连接到主数据库</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'demo_mysql'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> [</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'driver'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'mysql'</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'url'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'DATABASE_URL'</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'host'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'DB_HOST'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'127.0.0.1'</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'port'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'DB_PORT'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'3306'</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 主数据库</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'database'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'2021_demo'</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'username'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'DB_USERNAME'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'forge'</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'password'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'DB_PASSWORD'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">''</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'unix_socket'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'DB_SOCKET'</span>, <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">''</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'charset'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'utf8mb4'</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'collation'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'utf8mb4_unicode_ci'</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'prefix'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">''</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'prefix_indexes'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">true</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'strict'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">true</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'engine'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">null</span>,</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'options'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">extension_loaded</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'pdo_mysql'</span>) <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">?</span> <span style="box-sizing: border-box;color: rgb(232, 191, 106) !important">array_filter</span>([</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">                <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">PDO</span>::<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">MYSQL_ATTR_SSL_CA</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">env</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'MYSQL_ATTR_SSL_CA'</span>),</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">            ]) : [],</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">        ],</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">     ]</span>

我这里主系统与子系统的数据库账号、密码是一样的,因此只修改了数据库名。

2)子系统User模型类配置连接

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 位置:子系统</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// sub.demo.com</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// app/Models/User.php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 子系统用户模型中新增如下两个配置</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 连接到主系统数据库,demo_mysql是在database.php配置文件中</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 配置连接到主系统的名字</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">protected</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$connection</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'demo_mysql'</span>;</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 使用的数据表</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">protected</span> <span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">$table</span>      <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'users'</span>;</span>

第七步:简单测试

1)浏览中访问主系统demo.com/register并注册一个用户

2)sub.demo.com子系统中获取主系统注册的用户

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 位置:sub.demo.com 子系统</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// routes/web.php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 获取主系统中的用户</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">Route</span>::<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">get</span>(<span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'sub'</span>, <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">function</span>(){</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">dd</span>(<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">\App\Models\User</span>::<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">all</span>());</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">});</span>

3)浏览器中访问子系统sub.demo.com/sub,可以看到获取到了主系统的用户信息了。

4)查看两个系统数据库中的users表,发现只主系统的users表中有用户数据。

第八步:配置基于数据库的session共享驱动

1)主系统和子系统都执行如下操作

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">php</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">artisan</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">session</span>:<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">table</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">php</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">artisan</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">migrate</span></span>

执行完后,会在数据库中生成一个sessions表,用于存储session信息

2)修改驱动为数据库驱动

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// .env</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 主系统和子系统的驱动都设置为database</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">SESSION_DRIVER</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">database</span></span>

3)分别访问demo.comsub.demo.com

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 主系统数据库</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">mysql<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">></span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">select</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">*</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">from</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2021</span>_demo<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">.sessions\G</span><span style="box-sizing: border-box">;</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">***************************</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1.</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">row</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">***************************</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">           id<span style="box-sizing: border-box">:</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0XB</span>n9XXqJ6fA3yGO5Lx0IjkURT5PVbIawvezRphV</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">      user_id<span style="box-sizing: border-box">:</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">NULL</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">   ip_address<span style="box-sizing: border-box">:</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127.0.0.1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">   user_agent<span style="box-sizing: border-box">:</span> Mozilla/5<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">.0</span> <span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span>Windows NT <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">10.0</span><span style="box-sizing: border-box">;</span> Win64<span style="box-sizing: border-box">;</span> x64<span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> AppleWebKit/537<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">.36</span> <span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span>KHTML<span style="box-sizing: border-box">,</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">like</span> Gecko<span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> Chrome/95<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">.0.4638.69</span> Safari/537<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">.36</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">      payload<span style="box-sizing: border-box">:</span> 省略该信息,太长了</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">last_activity<span style="box-sizing: border-box">:</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1636888685</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">row</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">in</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">set</span> <span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0.00</span> sec<span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 子系统数据库</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">mysql<span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">></span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">select</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">*</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">from</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2021</span>_sub_demo<span style="box-sizing: border-box;color: rgb(224, 108, 117) !important">.sessions\G</span><span style="box-sizing: border-box">;</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">***************************</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1.</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">row</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">***************************</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">           id<span style="box-sizing: border-box">:</span> CZBCGqcAEEMWp3IUWh8LYKO8ROXcbgXwtde0f5Z0</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">      user_id<span style="box-sizing: border-box">:</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">NULL</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">   ip_address<span style="box-sizing: border-box">:</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127.0.0.1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">   user_agent<span style="box-sizing: border-box">:</span> Mozilla/5<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">.0</span> <span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span>Windows NT <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">10.0</span><span style="box-sizing: border-box">;</span> Win64<span style="box-sizing: border-box">;</span> x64<span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> AppleWebKit/537<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">.36</span> <span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span>KHTML<span style="box-sizing: border-box">,</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">like</span> Gecko<span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span> Chrome/95<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">.0.4638.69</span> Safari/537<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">.36</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">      payload<span style="box-sizing: border-box">:</span> 省略该信息,太长了</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">last_activity<span style="box-sizing: border-box">:</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1636888738</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">row</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">in</span> <span style="box-sizing: border-box;color: rgb(198, 120, 221) !important">set</span> <span style="box-sizing: border-box;color: rgb(153, 153, 119)">(</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0.00</span> sec<span style="box-sizing: border-box;color: rgb(153, 153, 119)">)</span></span>

可以看到user_id为NULL,说明用户没有登录,用户登录后,user_id将记录用户的ID。

4)配置session共享

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 位置:子系统</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// config/session.php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 将子系统连接主系统的session</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'connection'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'demo_mysql'</span>,</span>

注意:此时,主系统中的sessions表中只有一条记录。子系统中的seesion连接修改到主系统后,再次访问子系统sub.demo.com生,就会发现,在主系统中的sessions表多出了一条session记录,这个记录就是子系统的session信息。

第九步:跨站登录的实现

1)修改主系统和子系统的session域名

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// config/session.php</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'domain'</span> <span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=></span> <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">'.demo.com'</span>,</span>

主系统和子系统的domain值设置成一样。

2)将主系统中的APP_KEY值覆盖子系统的APP_KEY值。

<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 主系统</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// .env</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">APP_KEY</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">base64</span>:<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">788</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">KCi6RQZH3</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">fTm5wr04CGFOdMR1Ht7GvHk7JL15WM</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">    </span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// 子系统</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important">// .env</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">APP_KEY</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">base64</span>:<span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">788</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">KCi6RQZH3</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">/</span><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">fTm5wr04CGFOdMR1Ht7GvHk7JL15WM</span><span style="box-sizing: border-box;color: rgb(86, 182, 194) !important">=</span>    </span>

3)删除主系统数据库sessions表中的数据

4)清除浏览器缓存,并访问主系统和子系统,将看到主系统数据库中sessions表中只有一条session记录。

第十步:跨站登录实现的测试

1)子系统中使用第七步在主主系统中注册的用户进行登录。

访问:sub.demo.com/login进行登录,子登录登录成功

2)访问主系统demo.com,发现已经处于登录状态。

3)在主系统中退出,然后在访问子系统,发现子已经系统退出

4)在主系统中进行登录,然后刷新子系统,发现子系统已登录。

我是温新

每天进步一点点,就一点

请登录后再评论