现在应该有大虾在吧,困惑中,期待中这是服务器上的测试液面
http://how172.nxm.cn/notebook/aa.php

解决方案 »

  1.   

    服务器上的php版本是多少?
      

  2.   

    <?php
    /**
    *  Copyright (C), 2002-2003, ustb
    *  File name:      aa.php
    *  Author:  偶然     Version:  1.0      Date: 2003.9.15
    *  Description:    一个关于session的小问题
    *  本地测试通过
    */session_start();/* 初始化$s_ */
    $s_ = 'temp';/* 如果session没有注册,将$s_的值注册 */
    if(!isset($_SESSION["s_"]))
    {

    $_SESSION['s_']=$s_;
    }/* 计算出新的$s_ */
    $n_=rand()%10000;/* 如果有提交且与session有的值相同,那么注册新的$s_ */
    if(isset($_POST[''])&&$_POST[""]<>""&&$_SESSION["s_"]==$_POST[""])
    {

        $_SESSION["s_"]=$n_;
        echo "ooooo";
    }
    else
    {
        $_SESSION["s_"] = $s_;
    ?>
    <form  method="post">
    <input name="" type=hidden  value="<?=$s_?>">
    aaaaa
    <input type=submit value="send">
    </form><?
    }
    ?>
      

  3.   

    ustb(偶然)兄,你可能曲解我的意思了,因为我这段小程序要保证每次刷新,都有新的随机
    $post[]产生,这样的话就固定$post[]=="temp"勒不过还是谢谢你:)
      

  4.   

    我把你的程序传上服务器了http://how172.nxm.cn/notebook/bb.php前面把$post[]和$_SESSION["s_"] 输出了
      

  5.   

    由于你的程序在本地没有问题,所以服务器的php版本和设置都可能影响程序的正确执行
    建议你在测试页中执行:
    echo phpversion();
    看看版本是多少
      

  6.   

    我的环境是php4.3.2,我本地调试的时候是习惯于显示所有的错误,包括notice,所以只要我本地能通过的,在服务器上(php4.3.2)上是肯定pass的。
    你的程序一到我这里就冒两个notice,如果真的是版本的问题那么你的session注册,判断等都要改改。再有,就是,如果你只是想随机的注册一个session请用这一段:
    <?php
    /**
    *  Copyright (C), 2002-2003, ustb
    *  File name:      aa.php
    *  Author:  偶然     Version:  1.0      Date: 2003.9.15
    *  Description:    随机注册一个session并与表单中的值作比较
    */session_start();/* 初始化$s_ */
    $s_ = '';/* 如果session没有注册,将$s_的值注册 */
    if(!isset($_SESSION["s_"]))
    {

        $_SESSION['s_']=$s_;
    }/* 计算出新的$n_ */
    $s_=rand()%10000;/* 如果有提交且与session的值相同,那么注册新的$s_ */
    if(isset($_POST[''])&&$_POST[""]<>""&&$_SESSION["s_"]==$_POST[""])
    {

        $_SESSION["s_"]=$s_;
    echo $_SESSION["s_"];
        echo "ooooo";
    }
    else
    {
        $_SESSION["s_"] = $s_;
    ?>
    <form  method="post">
    <input name="" type=hidden  value="<?=$s_?>">
    aaaaa
    <input type=submit value="send">
    </form><?
    }
    ?>
      

  7.   

    谢谢楼上的各位兄弟,尤其是 ustb(偶然) 
    已经测试过了,我服务器上的版本是4.3.1,session会自动记录上次的值,如果不注销的话;ustb(偶然)兄弟,你最后提供的代码和我的第一份是异曲同工的
    解决办法我已经找到了,就是产生随机码的函数换用别的名字,而不是$s_,因为4.3.1的php实在分不清$s_呵$_session[s_],这个应该就是问题根源了我写这段代码的目的是为了防止非授权的表单提交数据:)有别的实现方法吗?
      

  8.   

    有呀,检查数据是否是从本站来的,如果不是就退出。
    $_SERVER['HTTP_REFERER']用来检查链到本页的上一页链接,如果其链接地址不是本站的,禁止其操作。不过这个预定义变量“不是所有的用户代理(浏览器)都会设置这个变量,而且有的还可以手工修改 HTTP_REFERER”。
      

  9.   

    应该说用session来做权限控制是很不错的,不过如果是我来做我可能会这样做。
    第一,每一位用户都设置session;
    第一,只允许登录过的用户提交,比如在session中设置一项:postauth;那些没有登录的用户的session中肯定没有提交权限;
    第三,如果有非法提交就退出。
      

  10.   

    因为任何人都可以取得用户身份,他们在登陆后再通过自己的表单恶意的提交数据,这样就背离了这样做的初衷ps:我对非法表单提交数据这么敏感是因为我自己就作过个灌水机器人,专灌utbbs,因为他没有做这种限制:)