所以事件链是:
用户提交表单.
在处理提交期间,会生成一条消息,例如"您的记录已保存".
用户被重定向到新页面,比如搜索结果.
新页面需要显示消息.
那么,问题是如何从第2步到第3步获取消息?这只是一个简单的例子......还有许多其他更复杂的例子.
我正在使用PHP.
需求:
支持多条消息,需要根据需要在接收机器上进行格式化
消息可以添加到同一页面上(例如在步骤4中)
从任何函数或对象内部添加的消息
我提出了一些选择:
作为数组存储在会话变量中,并在每次显示后清空
传递为get或query参数; 因为你经常处理这个并且必须记得得到它会变得烦人; 因为它可以变长,它可以很容易地超过查询字符串的最大长度
基于每个会话存储在数据库中(可能并不总是为登录用户); 这将需要在每个页面上添加额外的插入,可能是多个,并在每个页面上进行额外选择
目前我一直在会话中将消息存储在一个数组中,但我想知道是否有更好的方法.我不认为上面的其他两个选项非常好.
编辑:我使用会话方法的2个函数:AddStatusMsg()(向数组添加元素)和DisplayStatusMsg()(返回HTML格式的消息并清空数组).
我建议AGAINST将这些消息存储在数据库或会话中,原因很简单:制表符.(嗯,真的,HTTP的无状态特性.)
想想一个人,你的网站的不同部分有多个标签.此人执行某些操作,当加载时,切换到另一个选项卡并单击链接.如果您将消息存储在会话/数据库中,并且切换到选项卡也是一个可以显示这些消息的页面,则用户现在已进入竞争状态,根据服务器首先响应的请求,消息可能显示他们不打算的地方.
现在,在某些情况下,这可能无关紧要,但在某些情况下也可能非常混乱.
将消息放入请求中并不一定要像最初看起来那样糟糕.也许您可以使用数字(或者,用于奖励混淆,散列)ID存储要在数据库中显示的所有消息,并在查询字符串中传递ID列表.这使查询字符串保持简短,您所要做的就是跟踪代码中与哪些消息对应的ID.