26
2019.2

session支持

作者: POPASP
系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的`S_`函数完成。 `S_`函数是一个多元化操作函数,传入不同的参数调用可以完成不同的功能操作,包括下面一些功能。 ## `S_`用于设置session值 session初始化设置,参数有两种情况,第一种情况是含有两个元素的数组。 参数格式为 ```brush:vb array(name,value) ``` 使用方法为 ```brush:vb call S_(key,array(name,value)) ``` 例如: ### 值为标量 ```brush:vb call S_( array("mvc","POPASP") ) '设置session值 call S_( array("year",2016) ) call S_( array("bool",true) ) var_export S_("mvc") '读取session值 var_export S_("year") var_export S_("bool") ``` ### 值为数组 ```brush:vb call S_( array("colors",array("red","yellow","blue")) ) var_export isArray( S_("colors") ) 'True var_export S_("colors")(0) 'red var_export S_("colors")(1) 'yellow var_export S_("colors")(2) 'blue ``` ### 值为Dictionary对象 ```brush:vb dim dict : set dict = D_ dict("name") = "张三" dict("sex") = "男" dict("age") = "20" call S_( array("student",dict) ) var_export typename(S_("student")) 'Dictionary var_export S_("student")("name") '张三 var_export S_("student")("sex") '男 var_export S_("student")("age") '20 ``` ### 值为Recordset结果集 值为Recordset时分两种情况,第一种情况是使用了 "Select Top 1 ..." 这样的查询语句,限定只取一条记录,此时会将其转为Dictionary对象保存在session中。 ```bursh:vb call S_( array("post",M_("post").db.field("post_id,title").find())) '从数据库中取一篇文章给session var_export typename( S_("post") ) 'Dictionary var_export S_("post")("post_id") var_export S_("post")("title") ``` 第二种情况是没有使用"Top 1" 这样的限定一条语句,此时会将其转为Dictionary(键值从0开始,每个元素是Dictionary对象)保存在session中。 ```brush:vb dim key call S_( array("posts",M_("post").db.field("post_id,title").top(3).select())) '从数据库中取三篇文章给session var_export typename( S_("posts") ) 'Dictionary var_export S_("posts").Count '3 for each key in S_("posts") var_export key '分别是0、1、2 next ``` session初始化设置,参数的第二种情况是,参数只有一个,但为特殊类型 使用方法为 ```brush:vb call S_(arg) ``` ### 参数为Dictionary对象 ```brush:vb dim dict set dict = D_ dict("std_name") = "张三" dict("std_sex") = "男" dict("std_age") = "20" call S_(dict) var_export S_("std_name") '张三 var_export S_("std_sex") '男 var_export S_("std_age") '20 '如果某个值为null,则会从session中删除该值 dict("std_sex) = null call S_(dict) var_export typename(session("std_sex")) ' Empty ``` ### 参数为Recordset结果集 ```brush:vb call S_( M_("post").db.field("post_id,title").top(3).select() ) '只会将第一条记录赋值给session var_export s_("post_id") '会将自段名当键值 var_export s_("title") ``` ## `S_`用于获取session值 读取session值很简单,使用 `S_(key)` 即可 比如,上面例子中的 ```brush:vb var_export S_("std_name") var_export S_("std_sex") var_export S_("std_age") ``` 此时key必须为一字符串。 ## `S_`用于删除session值 使用方法为 ```brush:vb call S_(array(key,null)) ``` 例如: ```brush:vb call S_(array("std_name",null)) var_export typename(session("std_name")) ' Empty ``` 另外,如果Dictionary中的某个值为null,也会从session中删除,这个在前面已经举过例子了。但是通过设置值为null的方式并不适用于Recordset结果集。 ## `S_`用于清空session 使用方法为 ```brush:vb call S_(null) ``` ```brush:vb call S_(null) var_export POP_MVC.count(session) '值为0,说明全部清空 ```