session共享的问题: 如果一个公司有两个服务器
当用户访问第一个服务器,session信息会保存在第一个服务器中,
但是当用户访问第二个服务器的时候,是没有session信息的,这时就抛出了
session共享的问题。
session共享的解决方案: 1.放在数据库
2.放在缓存服务器中:redis 或Memcache
session组件在vendor/yiisoft/yii2/web/session.php文件中,在里面可以找到
实例:
在components文件夹下创建SNhelper.php
namespace app\components; class SNhelper{ //添加操作 public static function set($key,$value){ \yii::$app->session->set($key,$value); } //查询操作 public static function get($key){ return \yii::$app->session->get($key,false); } //删除操作 public static function del($key){ \yii::$app->session->remove($key); } }创建一个控制器SessionController.php
namespace app\controllers; use app\components\SNhelper; use yii\base\Controller; class SessionController extends Controller{ //调用添加数据方法 public function actionIndex(){ SNhelper::set('username','aaaa'); SNhelper::set('password','1234'); } //调用查询方法 public function actionGet(){ echo SNhelper::get('username'); echo SNhelper::get('password'); } //调用1删除方法 public function actionDel(){ SNhelper::del('username'); } }在浏览器url中调用即可
SessionFlash的应用
原理: sessionFlash数据只在下一请求可以使用,使用完毕即失效
使用场景: 做商城支付的时候,用户已经支付了订单,提交过了一次订单,那么就不能再让他重复提交了,
生成订单之后,设置session数据。session数据只在提交完订单之后生效,如果支付成功,我们就不 用管这个session了,如果他再次提交,session中没有数据,那他提交不了表单了。如果支付失败, 那我们再设置这个flash,还让他继续提交
session放到数据库中的解决方法:只需要在config/web.php的components中设置
'session' => [ 'class' => 'yii\web\DbSession', 'db' => 'db', //这里就是db不要改,数据库名在db.php里已配置好 'sessionTable' => 'session',//数据表名 ]然后在调用session方法的时候会自动插入数据到数据表中