请进:关于一个session的问题

qsnake 2002-03-21 10:37:23
windows2k pro + apache1.3.23 + php4.1.2
php设置:register_globals=on,session的设置是默认设置
测试以下程序
<?php
session_start();
if ( session_is_registered('ttt') ) {
$ttt = $_SESSION['ttt'];
}
session_register('ttt');
$ttt++;
echo $ttt;
?>
刷新页面,显示的数值是递增

当我修改php.ini设置register_globals=off后测试
刷新页面递增到2以后怎么刷新显示结果都不会递增,请问为何?
...全文
54 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
qsnake 2002-03-26
  • 打赏
  • 举报
回复
up
coollzh 2002-03-26
  • 打赏
  • 举报
回复
If session_start() was not called before function session_register() is called, an implicit call to session_start() with no parameters will be made.

anybody1 2002-03-25
  • 打赏
  • 举报
回复
好象不是很明确哦
qsnake 2002-03-24
  • 打赏
  • 举报
回复
http://www.php.net/manual/en/ref.session.php

Use of $_SESSION (or $HTTP_SESSION_VARS with PHP 4.0.6 or less) is recommended for security and code readablity. With $_SESSION or $HTTP_SESSION_VARS, there is no need to use session_register()/session_unregister()/session_is_registered() functions. Users can access session variable like a normal variable.

Caution
If you are using $HTTP_SESSION_VARS/$_SESSION and disable register_globals, do not use session_register(), session_is_registered() and session_unregister().

If you enable register_globals, session_unregister() should be used since session variables are registered as global variables when session data is deserialized. Disabling register_globals is recommended for both security and performance reason.

手册中没有说不需要使用session_start(),但是根据给出的例子,应该是可以不需要session_start()函数和其他的session_*()函数

darkwing() ,看清楚了么?需要我翻译么?
SimonDW 2002-03-23
  • 打赏
  • 举报
回复
faint,手册里那里说了“使用$_SESSION不用session_*()的函数”
请问那一个地方?
anybody1 2002-03-23
  • 打赏
  • 举报
回复
正在考虑
不过先来up一下
看有没有别人,知道
qsnake 2002-03-22
  • 打赏
  • 举报
回复
这也正是我的问题
欢迎探讨
anybody1 2002-03-22
  • 打赏
  • 举报
回复
搞笑的是
我用你的第一个程序,刷了n边同样,数值没有递增~~
why?
qsnake 2002-03-22
  • 打赏
  • 举报
回复
手册说了,使用$_SESSION不用session_*()的函数
SimonDW 2002-03-21
  • 打赏
  • 举报
回复
你的这段代码没有用session_start()……
qsnake 2002-03-21
  • 打赏
  • 举报
回复
请测试php.net上的例子,register_globals=off
<?php
// Use $HTTP_SESSION_VARS with PHP 4.0.6 or less
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
echo $_SESSION['count'];
?>
刷新页面,是否显示递增?
我自己测试结果一直显示0
qsnake 2002-03-21
  • 打赏
  • 举报
回复
to darkwing() :
$ttt当然不变,但是我程序中已经赋值了$ttt = $_SESSION['ttt'];
并且页面刷新一次,就重新注册新的session "ttt"

to anybody1(随便编一个) :
你说的我都明白,那么我的测试程序应该如何写?

anybody1 2002-03-21
  • 打赏
  • 举报
回复
$_SESSION[]
是php的预定义变量
属于globals
anybody1 2002-03-21
  • 打赏
  • 举报
回复
$_SESSION
是php的预定义变量,也是全域变量
anybody1 2002-03-21
  • 打赏
  • 举报
回复
在 PHP 中,全域变数的有效范围 (scope) 仅限于主要程式中,不会影响到函式中同名的变数,也就是全域变数与区域变数互不侵犯。若要变数能通透到函式中,就要用到 $GLOBALS 阵列或是使用 global 宣告。在变数前面加上 global 的名称,就是宣告该变数为全域变数。用这种方式,就不需使用 $GLOBALS 阵列,也能让变数进入自行开发的函式中。

接下来先看静态变数的例子

<?php
// 静态变数的例子
function myfunc() {
static $mystr;
$mystr.="哈";
echo $mystr."<br>\n";
}
myfunc(); // 哈
myfunc(); // 哈哈
myfunc(); // 哈哈哈
?>


函式在执行时所产生的变数,在函式结束时就消失了,有时因为程式的需要,函式在回圈中,当不希望变数在每次执行完函式就消失的话,静态变数 (static variable) 就派上用场了。上例中,使用 $mystr 变数之前,先在变数前面加上 static,即表示变数 $mystr 是静态变数,当每次执行 myfunc() 函式时,$mystr 的值会一直增加,每执行一次就多一个哈字。若将 static 的静态变数宣告拿掉,就没办法累加哈字了。

<?php
// 不是静态变数的例子 (错误的)
function myfunc() {
$mystr.="哈";
echo $mystr."<br>\n";
}
myfunc(); // 哈
myfunc(); // 哈
myfunc(); // 哈
?>



那么,你现在知道把register_globals=off关掉,会发生什么情况了吧。:)

SimonDW 2002-03-21
  • 打赏
  • 举报
回复
那是当然,$_SESSION['ttt']++
才会改变
因为register_globals=off后,$ttt不再代表session的'ttt'变量。

21,886

社区成员

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

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