Foxtable(狐表)用户栏目专家坐堂 → 全局变量和静态变量问题


  共有3699人关注过本帖树形打印复制链接

主题:全局变量和静态变量问题

帅哥哟,离线,有人找我吗?
ycs5801
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:911 积分:6617 威望:0 精华:0 注册:2009/6/24 9:44:00
全局变量和静态变量问题  发帖心情 Post By:2022/5/12 20:44:00 [只看该作者]

全局变量问题:多个用户分别登录后,通过yonghuxingming = dr("用户姓名"),向全局变量yonghuxingming赋值,将自己的姓名赋给全局变量。如果用户a赋值后,用户b又登录,这个时候通过messagebox.show显示yonghuxingming的值,为什么用户a显示的a的用户名,b显示的是b的。既然是全局变量,不是应该后边的人登录后再赋值,前边的人的变量也会改变吗?

静态变量问题:
Static fzfilter As String

If e.PostValues.Count > 0 Then 
    If e.PostValues.ContainsKey("船舶代理") Then
        flt = "船舶代理 = '" & e.PostValues("船舶代理") & "'" '合成条件
    End If
   
Else
    flt = fzfilter
End If

If flt > "" Then
    fzfilter = flt 
......

这里边,我是为了实现后边的翻页传值,把每次的筛选条件flt传给fzfilter。但是实际不同用户先后筛选后翻页时,fzfilter会混乱,就是传值出现问题,请问怎么修改?

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105959 积分:538870 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/12 21:01:00 [只看该作者]

不管是全局还是静态,变量是存储在内存中的,并且是存在于打开的程序的内存里,只能单机使用。不同电脑都是不同的内存,怎么可能共用内存?就算是同一台电脑打开2个相同的程序,2个程序也是有各自的内存空间的,互不相干。

 回到顶部
帅哥哟,离线,有人找我吗?
ycs5801
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:911 积分:6617 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2022/5/12 21:35:00 [只看该作者]

那我第二个问题,静态变量,为什么会翻页时会出现问题。比如说a用户我筛选后,翻页,从第一页翻到第二页之后,用户b开始筛选,也从第一页翻到第二页,这时用户a点下一页,筛选条件就变为用户b的筛选条件的第二页了。

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105959 积分:538870 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/12 21:44:00 [只看该作者]

如果是web服务,全局变量和静态变量是前端用户共用的,因为是在同一个服务器的项目程序。

如果是cs客户端,不同电脑和程序,全局变量和静态变量是互相独立的。

 回到顶部
帅哥哟,离线,有人找我吗?
ycs5801
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:911 积分:6617 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2022/5/12 21:59:00 [只看该作者]

我这个应该算web服务了,那这样说第二个问题就是正常了,那第一个问题怎么解释呢?

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105959 积分:538870 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/12 22:34:00 [只看该作者]

同一个服务端程序,全局变量肯定也是共用的。我测试没有问题。下面实例分别使用2个不同的浏览器测试,使用不同的账户登录后,不管哪个浏览器点击查看按钮,表A记录的全局变量值都是同一个

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目21.zip



 回到顶部
帅哥哟,离线,有人找我吗?
ycs5801
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:911 积分:6617 威望:0 精华:0 注册:2009/6/24 9:44:00
我的实例  发帖心情 Post By:2022/5/13 10:06:00 [只看该作者]


以下内容是专门发给有点蓝浏览


看看我的实例,你用刘德华和张学友分别登录,密码都是888,然后先后浏览主页里的查询船舶,我这边的结果是全局变量用户姓名一直不变,每个人登录之后就 不变了。

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105959 积分:538870 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/13 10:52:00 [只看该作者]

这个道理就很简单了,不管打开哪个页面,都会执行httprequest前35行代码,注意17行这一句【yonghuxingming = dr("用户姓名")】,也就是说只要cookie有值,又会查询把当前用户的名称给全局变量了。

除非在后的时间比如几毫秒内同时有不同的用户登录,才有可能出现变量值和登录用户不一致的情况。

个人的建议是,不管什么情况,web服务端项目都不要使用全局变量和静态变量,否则因此出了问题,可能很难查找原因,没有必要给自己甚至后来人挖这么大的坑。

 回到顶部
帅哥哟,离线,有人找我吗?
ycs5801
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:911 积分:6617 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2022/5/13 11:03:00 [只看该作者]

好的老师,那您看替代这种方法用什么好呢?用cookie判断当登录用户名,然后再去用户资料里去查找这个人的相关信息,这样最科学吗?

 回到顶部
帅哥哟,离线,有人找我吗?
ycs5801
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:911 积分:6617 威望:0 精华:0 注册:2009/6/24 9:44:00
  发帖心情 Post By:2022/5/13 11:07:00 [只看该作者]

f e.PostValues.Count > 0 Then 
    If e.PostValues.ContainsKey("船舶代理") Then
        flt = "船舶代理 = '" & e.PostValues("船舶代理") & "'" '合成条件
    End If
   
Else
    flt = fzfilter
End If

If flt > "" Then
    fzfilter = flt 
......

还有上边这个问题,我看帮助中是用cookies传值筛选条件的,但是最后用wb.ClearCookie()这个会把整个cookies都删掉。

 回到顶部
总数 11 1 2 下一页