在调用session_start()之前,我试图检查PHPSESSID的值。我不喜欢这样的留言。session_start(): The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in
非法字符可以通过简单的regex preg_replace("/[^a-zA-Z0-9]/", "", $input_lines);过滤。
但是我该怎么检查最大长度呢?在我的本地XAMPP安装中,我得到了一个26个字符的PHPSESSID,但是在部署服务器上,我得到了一个32个字符的PHPSESSID。
PHP手册只是说了一些关于允许的字符,但是注意到了长度。
根据会话处理程序的不同,会话id中并不允许所有字符。例如,文件会话处理程序只允许在a-zA-Z0-9、(逗号)和-(减号)范围内的字符!
编辑本例中的主要问题是,即使禁用了error_reporting,也会引发警告。该错误还抛出文件位置的路径。这是多余的!
发布于 2014-12-03 10:22:55
会话id的确切特征取决于您使用的会话处理程序。
在生产环境中,您可能有不同的会话处理程序(例如,添加加密的会话处理程序,或者将会话infor存储在不同的位置,需要不同的密钥)。而且,最大长度并不是说每个id都应该是这个长度,所以即使使用相同的会话处理程序,不同的id也可能是有效的。
据我所知,无法“询问”会话处理程序id是否有效或它支持什么特性,因此我个人不会验证id,但只要尝试加载会话并在消息失败时捕获消息,在此之后,您可以在没有会话的情况下继续工作,或者优雅地关闭请求。
如果您仍然认为自己检查会话id是个好主意,那么您可以看看这个问题,在那里人们试图通过应用正则表达式来解决问题。
https://stackoverflow.com/questions/27268942
复制相似问题