我学习session在页面之间传值,但传不了,有人说是两个页面中的session id不一样。但我写代码测试了,页面中的session id 是一样的,但还是不能传值,我也看了php.ini中的配置和人家说的一致,以下是我的配置文件中关于session的配置和代码,请大家看看有什么问题,不甚感激!!
php.ini
……
[Session]
; Handler used to store/retrieve data.
session.save_handler = files; Argument passed to save_handler.  In the case of files, this is the path
; where data files are stored. Note: Windows users have to change this
; variable in order to use PHP's session functions.
;
; As of PHP 4.0.1, you can define the path as:
;
;     session.save_path = "N;/path"
session.save_path = "D:\usr\php5\tmp"
;
; where N is an integer.  Instead of storing all the session files in
; /path, what this will do is use subdirectories N-levels deep, and
; store the session data in those directories.  This is useful if you
; or your OS have problems with lots of files in one directory, and is
; a more efficient layout for servers that handle lots of sessions.
;
; NOTE 1: PHP will not create this directory structure automatically.
;         You can use the script in the ext/session dir for that purpose.
; NOTE 2: See the section on garbage collection below if you choose to
;         use subdirectories for session storage
;
; The file storage module creates files using mode 600 by default.
; You can change that by using
;
;     session.save_path = "N;MODE;/path"
;
; where MODE is the octal representation of the mode. Note that this
; does not overwrite the process's umask.
session.save_path = "D:\usr\php5\tmp"; Whether to use cookies.
session.use_cookies = 1; This option enables administrators to make their users invulnerable to
; attacks which involve passing session ids in URLs; defaults to 0.
; session.use_only_cookies = 1; Name of the session (used as cookie name).
session.name = PHPSESSID; Initialize session on request startup.
session.auto_start = 1; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 0; The path for which the cookie is valid.
session.cookie_path = /; The domain for which the cookie is valid.
session.cookie_domain =; Handler used to serialize data.  php is the standard serializer of PHP.
session.serialize_handler = php; Define the probability that the 'garbage collection' process is started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.session.gc_probability = 1
session.gc_divisor     = 100; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
session.gc_maxlifetime = 1440; NOTE: If you are using the subdirectory option for storing session files
;       (see session.save_path above), then garbage collection does *not*
;       happen automatically.  You will need to do your own garbage
;       collection through a shell script, cron entry, or some other method.
;       For example, the following script would is the equivalent of
;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
;          cd /path/to/sessions; find -cmin +24 | xargs rm; PHP 4.2 and less have an undocumented feature/bug that allows you to
; to initialize a session variable in the global scope, albeit register_globals
; is disabled.  PHP 4.3 and later will warn you, if this feature is used.
; You can disable the feature and the warning separately. At this time,
; the warning is only displayed, if bug_compat_42 is enabled.session.bug_compat_42 = 1
session.bug_compat_warn = 1; Check HTTP Referer to invalidate externally stored URLs containing ids.
; HTTP_REFERER has to contain this substring for the session to be
; considered as valid.
session.referer_check =; How many bytes to read from the file.
session.entropy_length = 0; Specified here to create the session id.
session.entropy_file =;session.entropy_length = 16;session.entropy_file = /dev/urandom; Set to {nocache,private,public,} to determine HTTP caching aspects
; or leave this empty to avoid sending anti-caching headers.
session.cache_limiter = nocache; Document expires after n minutes.
session.cache_expire = 180; trans sid support is disabled by default.
; Use of trans sid may risk your users security.
; Use this option with caution.
; - User may send URL contains active session ID
;   to other person via. email/irc/etc.
; - URL that contains active session ID may be stored
;   in publically accessible computer.
; - User may access your site with the same session ID
;   always using URL stored in browser's history or books.
session.use_trans_sid = 0; Select a hash function
; 0: MD5   (128 bits)
; 1: SHA-1 (160 bits)
session.hash_function = 0; Define how many bits are stored in each character when converting
; the binary hash data to something readable.
;
; 4 bits: 0-9, a-f
; 5 bits: 0-9, a-v
; 6 bits: 0-9, a-z, A-Z, "-", ","
session.hash_bits_per_character = 4; The URL rewriter will look for URLs in a defined set of HTML tags.
; form/fieldset are special; if you include them here, the rewriter will
; add a hidden <input> field with the info which is otherwise appended
; to URLs.  If you want XHTML conformity, remove the form entry.
; Note that all valid entries require a "=", even if no value follows.
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
……而且我把cookies也打开了。
以下是代码:
s1.php: <?php
session_start();
echo session_id()."<br>";
$user="admin";
session_register($user);
echo $user."<br>";
if(session_is_registered($user))
echo "Has registered!<br>";
else 
echo "~~~~~~~~~";
echo "<a href='s2.php'>goto s2.php</a>";
?>s2.php:
<?phpsession_start();
echo session_id()."<br>";
if(isset($_SESSION['user']))
{
echo $_SESSION['user'];
}
else 
{
echo "You didn't register!"."<br>";
}
?>另外我定制的session.save_path = "D:\usr\php5\tmp",但在该目录下没有session文件,是不是问题出在这里了?究竟是什么原因导致不能传值啊?急!!!请各位帮忙解答,谢谢了!!!

解决方案 »

  1.   

    对了,我的某次运行结果为:
    s1页面:
    bbe3d8dd0bd6bc5793e8f1850f7745c4
    admin
    Has registered!
    goto s2.php(显示为超链接)
    点击该链接进入s2页面,结果为:
    bbe3d8dd0bd6bc5793e8f1850f7745c4
    You didn't register!
    可见session id是一致的,可是$user并没有传过去,请问为什么?
      

  2.   

    试试:s1.php: 
    <?php
    session_start();
    echo session_id()."<br>";
    $user="admin";
    $_SESSION['user']=$user;
    echo $user."<br>";
    ?>s2.php:
    <?phpsession_start();
    echo session_id()."<br>";
    if(isset($_SESSION['user']))
    {
    echo $_SESSION['user'];
    }
    else 
    {
    echo "You didn't register!"."<br>";
    }
    ?>
      

  3.   

    原来你的代码这句错了:
    session_register($user);
    应为
    session_register('user');
      

  4.   

    现在可以不用session_register了
    ------------------------------------
    现在可以不用session_register了