使用 PRG 模式和闪烁进行会话处理

使用 prg 模式和闪烁进行会话处理

在我们之前的项目中,验证失败时直接从 post 请求返回视图并不是最好的方法。

问题

当用户提交包含无效数据的登录表单时,表单会显示错误消息并将用户重定向到登录页面。但是,如果用户刷新页面或导航离开并返回到登录页面,相同的错误消息仍然存在。

解决方案

为了解决这个问题,我们可以使用会话来存储错误并实现 prg 模式。我们可以将错误存储在 $_session 超全局变量中,并将 create.php 中的错误语句更新为:

$_session['errors'] = $form->errors();view('session/create.view.php', [ 'errors' => $_session['errors'] ?? [] ]);

但即使有了这样的改变,问题仍然存在。为了解决这个问题,我们必须将 return 语句更改为:

return redirect ('/login');


如果发生任何错误,它会将用户移至登录页面,但不会向用户显示错误
然后我们刷新 $_session 超全局变量以在短时间内销毁会话:

$_session['_flashed']['errors'] = $form->errors();

现在您可以注意到问题已经解决了,但是要重构此代码,我们必须在类中添加 prg 方法

会话类(prg 模式)

为了重构,我们创建一个名为 core/session.php 的新文件,其中包含管理用户会话的 session 类:

<?php namespace core;class session {    public static function has($key) {        return (bool) static::get($key);    }    public static function put($key, $value) {        $_session[$key] = $value;    }    public static function get($key, $default = null) {        return $_session['_flash'][$key] ?? $_session[$key] ?? $default;    }    public static function flash($key, $value) {        $_session['_flash'][$key] = $value;    }    public static function unflash() {        unset($_session['_flash']);    }    public static function flush() {        $_session = [];    }    public static function destroy() {        static::flush();        session_destroy();        $params = session_get_cookie_params();        setcookie('phpsessid', '', time() - 3600, $params['path'], $params['domain'], $params['secure'], $params['httponly']);    }}

flash 方法将数据存储在 $_session[‘_flash’] 数组中,用于会话刷新。get 方法检查 $_session[‘_flash’] 中是否有 flash 数据并返回。如果没有,则返回常规会话数据或默认值。unflash 方法取消设置闪烁的数据,使其仅可用于下一个请求。prg 模式的实现方式是使用 put 方法在会话中存储数据,重定向(例如使用 return redirect(‘/login’);),然后使用 get 方法在下一个请求中检索数据。

通过使用这个session类,我们可以实现prg模式和会话闪烁来管理用户会话并防止重复的表单提交和不需要的错误消息持久化。

美容护理营业宣传单A5模板设计下载 美容护理营业宣传单A5模板设计下载

美容护理营业宣传单A5模板设计适用于美容护肤宣传单设计 本作品提供美容护理营业宣传单A5模板设计的图片会员免费下载,格式为PSD,文件大小为7.0M; 请使用软件Photoshop进行编辑,作品中文字及图均可以通过软件修改和编辑;

美容护理营业宣传单A5模板设计下载 0 查看详情 美容护理营业宣传单A5模板设计下载

有方法

在此文件中,has 方法返回一个布尔值,指示会话中是否存在某个键:

. public static function has($key) {    return (bool) static::get($key);}

重构注销功能

在 function.php 文件中,我们重构注销函数以使用 session 类:

session::destroy();

重构 get 方法

由于该项目已经运行良好。但是我们需要重构 core/session.php 中的 get 方法,将代码合并到单个语句中:

public static function get($key, $default = null) {    return $_SESSION['_flash'][$key] ?? $_SESSION[$key] ?? $default;}

我们今天的项目中进行了大量的重构,以使其外观更好,易于理解并提高代码的性能。

希望您已经清楚地理解了!.

以上就是使用 PRG 模式和闪烁进行会话处理的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/828971.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Java 21 中 Switch 的模式匹配
上一篇 2025年11月27日 06:57:24
《歧路旅人0》制作人寄语影片 介绍本作的魅力与典藏版内容
下一篇 2025年11月27日 06:58:44

相关推荐

发表回复

登录后才能评论
关注微信