欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php session_id 不停的变化

程序员文章站 2024-01-23 10:14:52
...
请问 我的页面上的session_id 为什么在不停的变化 不是固定的 我每刷新一次它就变化一次 这个应该是固定的啊
是什么问题导致的啊


回复讨论(解决方案)

浏览器不支持cookie?

多半是 session.auto_start = 1

也不排除你的浏览器不支持 cookie

session.auto_start = 0
我的浏览器支持cookie

那只能贴代码说话啦

rss.php

session_start();
$_SESSION["name"] = "lifffffff4";
echo $_SESSION["name"];
echo "
";
echo session_id();
?>
先访问上面的文件 然后访问下面的文件 两次的session_id 不一样
index.php
session_start();
echo $_SESSION["name"];
echo session_id();

?>

rss.php加url跳转过去

不要新开浏览器窗口

session_start();
$_SESSION["name"] = "lifffffff4";
echo $_SESSION["name"];
echo "
";
echo session_id();
echo "2222"
?>
一样的效果

在每段代码的后面加上
print_r($_COOKIE);

在每段代码的后面加上
print_r($_COOKIE);
我打印了都是空数组

session_start();
$_SESSION["name"] = "lifffffff4";
echo $_SESSION["name"];
echo "
";
echo session_id();
echo "2222";
print_r($_COOKIE);
?>


session_start();
echo $_SESSION["name"];
echo session_id();
print_r($_COOKIE);
?>

那就是 cookie 不支持了,无论如何 $_COOKIE['PHPSESSID'] 都应该有的

你更改了 php.ini 中 session 相关的设置了吗?

我没有改 php.ini 现在要怎么办

现在要怎么解决问题我也郁闷了 怎么没有 phpsession 这个cookie

我的浏览器是支持cookie的 这个不用怀疑

弱弱的问一下,session_id 对程序而言有什么特殊用途吗?通常是操作$_SESSION就可以了吧

你用 setcookie 设一个 cookie 变量再试试是否能读回来

同样的代码 放在别人的电脑上面都可以的 我的是怎么回事啊

echo     ini_get("session.use_cookies");//这个值多少

你用 setcookie 设一个 cookie 变量再试试是否能读回来
这个可以 我试过了 没有问题

注意开启错误提示看有无错误信息

error_reporting(E_ALL);ini_set('display_errors',true);


然后session相关的php.ini配置信息贴出来,大家好帮你分析。

[Session]
; Handler used to store/retrieve data.
; http://php.net/session.save-handler
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.
;
; The path can be defined as:
;
; session.save_path = "N;/path"
;
; 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.
; http://php.net/session.save-path
session.save_path = "d:/wamp/tmp"

; Whether to use cookies.
; http://php.net/session.use-cookies
session.use_cookies = 1

; http://php.net/session.cookie-secure
;session.cookie_secure =

; This option forces PHP to fetch and use a cookie for storing and maintaining
; the session id. We encourage this operation as it's very helpful in combatting
; session hijacking when not specifying and managing your own session id. It is
; not the end all be all of session hijacking defense, but it's a good start.
; http://php.net/session.use-only-cookies
session.use_only_cookies = 1

; Name of the session (used as cookie name).
; http://php.net/session.name
session.name = PHPSESSID

; Initialize session on request startup.
; http://php.net/session.auto-start
session.auto_start = 0

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
; http://php.net/session.cookie-lifetime
session.cookie_lifetime = 1000

; The path for which the cookie is valid.
; http://php.net/session.cookie-path
session.cookie_path = /

; The domain for which the cookie is valid.
; http://php.net/session.cookie-domain
session.cookie_domain =80tao.dev

; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript.
; http://php.net/session.cookie-httponly
session.cookie_httponly =

; Handler used to serialize data. php is the standard serializer of PHP.
; http://php.net/session.serialize-handler
session.serialize_handler = php

; Defines the probability that the 'garbage collection' process is started
; on every session initialization. The probability is calculated by using
; gc_probability/gc_divisor. Where session.gc_probability is the numerator
; and gc_divisor is the denominator in the equation. Setting this value to 1
; when the session.gc_divisor value is 100 will give you approximately a 1% chance
; the gc will run on any give request.
; Default Value: 1
; Development Value: 1
; Production Value: 1
; http://php.net/session.gc-probability
session.gc_probability = 1

; Defines the probability that the 'garbage collection' process is started on every
; session initialization. The probability is calculated by using the following equation:
; gc_probability/gc_divisor. Where session.gc_probability is the numerator and
; session.gc_divisor is the denominator in the equation. Setting this value to 1
; when the session.gc_divisor value is 100 will give you approximately a 1% chance
; the gc will run on any give request. Increasing this value to 1000 will give you
; a 0.1% chance the gc will run on any give request. For high volume production servers,
; this is a more efficient approach.
; Default Value: 100
; Development Value: 1000
; Production Value: 1000
; http://php.net/session.gc-divisor
session.gc_divisor = 1000

; After this number of seconds, stored data will be seen as 'garbage' and
; cleaned up by the garbage collection process.
; http://php.net/session.gc-maxlifetime
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, even when 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. This feature
; introduces some serious security problems if not handled correctly. It's
; recommended that you do not use this feature on production servers. But you
; should enable this on development servers and enable the warning as well. If you
; do not enable the feature on development servers, you won't be warned when it's
; used and debugging errors caused by this can be difficult to track down.
; Default Value: On
; Development Value: On
; Production Value: Off
; http://php.net/session.bug-compat-42
session.bug_compat_42 = On

; This setting controls whether or not you are warned by PHP when initializing a
; session value into the global space. session.bug_compat_42 must be enabled before
; these warnings can be issued by PHP. See the directive above for more information.
; Default Value: On
; Development Value: On
; Production Value: Off
; http://php.net/session.bug-compat-warn
session.bug_compat_warn = On

; 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.
; http://php.net/session.referer-check
session.referer_check =

; How many bytes to read from the file.
; http://php.net/session.entropy-length
session.entropy_length = 0

; Specified here to create the session id.
; http://php.net/session.entropy-file
;session.entropy_file = /dev/urandom
session.entropy_file =

; http://php.net/session.entropy-length
;session.entropy_length = 16

; Set to {nocache,private,public,} to determine HTTP caching aspects
; or leave this empty to avoid sending anti-caching headers.
; http://php.net/session.cache-limiter
session.cache_limiter = nocache

; Document expires after n minutes.
; http://php.net/session.cache-expire
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 bookmarks.
; http://php.net/session.use-trans-sid
session.use_trans_sid = 0

; Select a hash function for use in generating session ids.
; Possible Values
; 0 (MD5 128 bits)
; 1 (SHA-1 160 bits)
; http://php.net/session.hash-function
session.hash_function = 0

; Define how many bits are stored in each character when converting
; the binary hash data to something readable.
; Possible values:
; 4 (4 bits: 0-9, a-f)
; 5 (5 bits: 0-9, a-v)
; 6 (6 bits: 0-9, a-z, A-Z, "-", ",")
; Default Value: 4
; Development Value: 5
; Production Value: 5
; http://php.net/session.hash-bits-per-character
session.hash_bits_per_character = 5

; 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 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.
; Default Value: "a=href,area=href,frame=src,form=,fieldset="
; Development Value: "a=href,area=href,frame=src,input=src,form=fakeentry"
; Production Value: "a=href,area=href,frame=src,input=src,form=fakeentry"
; http://php.net/url-rewriter.tags
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"

session.cookie_domain =80tao.dev


这个值去掉吧,,你确认需要?

这个是我项目的一个 配置 有影响吗

你说的去掉指的是什么意思

session.cookie_domain =80tao.dev
把这个去掉就可以了
但是为什么啊

session.cookie_domain =80tao.dev
把这个去掉就可以了
但是为什么啊

看命名还不清楚啊,,限制域啦

那个是设置session对应的cookie在什么域有效的
你是本地测试么?是http://localhost这么去访问你的项目的么?是的话就去掉,如果是正式站点,你改成

#注意加的那个点,表明所有子域有效,包括wwwsession.cookie_domain = .80tao.dev 

试下。

我填写那个域为什么就不行了啊 默认是空的 为什么 给我解释一下吧

那个是设置session对应的cookie在什么域有效的
你是本地测试么?是http://localhost这么去访问你的项目的么?是的话就去掉,如果是正式站点,你改成
PHP code
#注意加的那个点,表明所有子域有效,包括www
session.cookie_domain = .80tao.dev

试下。


这个很奇怪啊,我好像没见过.dev的正式域名,有吗?

session.cookie_domain =80tao.dev

表示 session 只在 80tao.dev 域有效

所以需要也在这个域中测试你的代码

引用 24 楼 的回复:

session.cookie_domain =80tao.dev
把这个去掉就可以了
但是为什么啊


看命名还不清楚啊,,限制域啦
我是本地反问

我填写那个域为什么就不行了啊 默认是空的 为什么 给我解释一下吧
是我本地的虚拟主机 配置的虚拟域名

引用 26 楼 的回复:

那个是设置session对应的cookie在什么域有效的
你是本地测试么?是http://localhost这么去访问你的项目的么?是的话就去掉,如果是正式站点,你改成
PHP code
#注意加的那个点,表明所有子域有效,包括www
session.cookie_domain = .80tao.dev

试下。



这个很奇怪啊,我好像没……
怎么一说还真是,有点奇葩了,我也没见过dev的域名。

这个很奇怪啊,我好像没见过.dev的正式域名,有吗?
是我本地的虚拟主机 配置的虚拟域名

好吧 表示我不知道

知道这个是个老帖了,可是我最近也遇到这个问题了。也是session_id不段变化,无法做购物车。然后我人为地用session_id("某个值'),可是竟然session不会过期了,无论怎样关浏览器,上一个会话还是存在。希望有大神在这里给我解答一下。谢谢了