当前位置:K88软件开发文章中心网站服务器框架Yii 2.0 → 文章内容

Sessions and Cookies

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-26 15:28:43

动覆盖相同名的已存在的任何数据, 为将数据追加到已存在的相同名flash中,可改为调用yii\web\Session::addFlash()。 例如:$session = Yii::$app->session;// 请求 #1// 在名称为"alerts"的flash信息增加数据$session->addFlash('alerts', 'You have successfully deleted your post.');$session->addFlash('alerts', 'You have successfully added a new friend.');$session->addFlash('alerts', 'You are promoted.');// 请求 #2// $alerts 为名为'alerts'的flash信息,为数组格式$alerts = $session->getFlash('alerts');注意: 不要在相同名称的flash数据中使用yii\web\Session::setFlash() 的同时也使用yii\web\Session::addFlash(), 因为后一个防范会自动将flash信息转换为数组以使新的flash数据可追加进来,因此, 当你调用yii\web\Session::getFlash()时,会发现有时获取到一个数组,有时获取到一个字符串, 取决于你调用这两个方法的顺序。CookiesYii使用 yii\web\Cookie对象来代表每个cookie,yii\web\Request 和 yii\web\Response 通过名为'cookies'的属性维护一个cookie集合,前者的cookie 集合代表请求提交的cookies, 后者的cookie集合表示发送给用户的cookies。读取 Cookies当前请求的cookie信息可通过如下代码获取:// 从 "request"组件中获取cookie集合(yii\web\CookieCollection)$cookies = Yii::$app->request->cookies;// 获取名为 "language" cookie 的值,如果不存在,返回默认值"en"$language = $cookies->getValue('language', 'en');// 另一种方式获取名为 "language" cookie 的值if (($cookie = $cookies->get('language')) !== null) { $language = $cookie->value;}// 可将 $cookies当作数组使用if (isset($cookies['language'])) { $language = $cookies['language']->value;}// 判断是否存在名为"language" 的 cookieif ($cookies->has('language')) ...if (isset($cookies['language'])) ...发送 CookiesYou can send cookies to end users using the following code: 可使用如下代码发送cookie到终端用户:// 从"response"组件中获取cookie 集合(yii\web\CookieCollection)$cookies = Yii::$app->response->cookies;// 在要发送的响应中添加一个新的cookie$cookies->add(new \yii\web\Cookie([ 'name' => 'language', 'value' => 'zh-CN',]));// 删除一个cookie$cookies->remove('language');// 等同于以下删除代码unset($cookies['language']);除了上述例子定义的 yii\web\Cookie::name 和 yii\web\Cookie::value 属性 yii\web\Cookie 类也定义了其他属性来实现cookie的各种信息,如 yii\web\Cookie::domain, yii\web\Cookie::expire 可配置这些属性到cookie中并添加到响应的cookie集合中。注意: 为安全起见yii\web\Cookie::httpOnly 被设置为true,这可减少客户端脚本访问受保护cookie(如果浏览器支持)的风险, 更多详情可阅读?httpOnly wiki article?for more details.Cookie验证在上两节中,当通过request?和?response?组件读取和发送cookie时,你会喜欢扩展的cookie验证的保障安全功能,它能 使cookie不被客户端修改。该功能通过给每个cookie签发一个哈希字符串来告知服务端cookie是否在客户端被修改, 如果被修改,通过request组件的yii\web\Request::cookiescookie集合访问不到该cookie。注意: Cookie验证只保护cookie值被修改,如果一个cookie验证失败,仍然可以通过$_COOKIE来访问该cookie, 因为这是第三方库对未通过cookie验证自定义的操作方式。Cookie验证默认启用,可以设置yii\web\Request::enableCookieValidation属性为false来禁用它,尽管如此,我们强烈建议启用它。注意: 直接通过$_COOKIE?和?setcookie()?读取和发送的Cookie不会被验证。当使用cookie验证,必须指定yii\web\Request::cookieValidationKey,它是用来生成s上述的哈希值, 可通过在应用配置中配置request?组件。return [ 'components' => [ 'request' => [ 'cookieValidationKey' => 'fill in a secret key here', ], ],];补充: yii\web\Request::cookieValidationKey 对你的应用安全很重要, 应只被你信任的人知晓,请不要将它放入版本控制中。

上一页  [1] [2] 


Sessions and Cookies