global 变量在大并发环境是线程安全的吗?

superhasty 2009-03-23 12:11:49
一个网站,在一个统一入口的页面设置了一个global变量获取用户输入的参数,然后重定向到另外一个页面读取这个参数。
这种情况下会不会导致某一个用户访问时,实际处理到的global变量值是另外一个用户输入的呢?

...全文
189 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
syu 2009-03-24
  • 打赏
  • 举报
回复
global管理输入信息的确是很不当的,全局变量不可以随意乱用.

但是,global跟多用户似乎并没有什么关系?

PHP执行细度决定了每一次用户请求,都是在单独的zend虚拟机里完成操作,变量封闭,不会出现这个用户输入的信息被那个用户访问.
所谓global的共享,是指在同一个zend虚拟机内部,可以跨函数,方法的符号变量表限制,访问外域变量.但不会出现A用户得到B用户输入的信息吧.

海诗美妆 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 froole 的回复:]
不要使用global变量获取用户输入的参数
可以直接从$_REQUEST获取用户发送的信息,
global是系统的共享空间,当多用户访问的时候,不可能准确获取用户输入的信息。
如果有显示输入信息功能的话,用户A很容易得到用户B的输入信息。
[/Quote]
global变量是用来保存系统共享内容的,
例如连接数据库的实例、缓存几乎没有变化的商品分类信息等等。
但是,用户输入信息是禁止用global变量操作的,

global使用不当,的确存在安全隐患,
但是如果用global管理输入信息,那就不是按全部安全的问题了——是自掘坟墓。

PHP5以后的版本,支持了很多OOP语言功能,所以,可以通过Singleton和Registory设计模式替代global。
这样的代码更安全,也便于管理。
yctin 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 syu 的回复:]
楼上的请分清楚线程和进程的区别
[/Quote]

好好好,进程
我其实不知道国内叫什么名称 haha
海诗美妆 2009-03-24
  • 打赏
  • 举报
回复
不要使用global变量获取用户输入的参数
可以直接从$_REQUEST获取用户发送的信息,
global是系统的共享空间,当多用户访问的时候,不可能准确获取用户输入的信息。
如果有显示输入信息功能的话,用户A很容易得到用户B的输入信息。
Zijian_Zhang 2009-03-23
  • 打赏
  • 举报
回复
学习一下,呵呵。
syu 2009-03-23
  • 打赏
  • 举报
回复
楼上的请分清楚线程和进程的区别
yctin 2009-03-23
  • 打赏
  • 举报
回复
global 只在同一个线程内有效
重定向已经是另一个请求~所以是另一个线程
yua3891 2009-03-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 syu 的回复:]
不会.PHP是进程级的,无法以线程的细颗粒处理元素.
所有的变量,函数,执行过程都是在单独的进程中执行,不同进程之间的变量完全封闭不会干扰.
[/Quote]
回答的 很详细。呵。
hqaht 2009-03-23
  • 打赏
  • 举报
回复
可以测试一下,打印出来
csfreesky 2009-03-23
  • 打赏
  • 举报
回复
不会
应该网 2009-03-23
  • 打赏
  • 举报
回复
恩。这个不用担心,是安全的。
syu 2009-03-23
  • 打赏
  • 举报
回复
不会.PHP是进程级的,无法以线程的细颗粒处理元素.
所有的变量,函数,执行过程都是在单独的进程中执行,不同进程之间的变量完全封闭不会干扰.

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧