The solution for php session not working: first open the php configuration file; then find the session-related configuration items; then create a new session file and set permissions; and finally re-upload the file.
Recommended: "PHP Video Tutorial"
Methods to solve session failure in PHP projects
I took the shuttle bus after work today. When I was about to arrive at the station, the leader of my previous company sent me a QQ message, which meant putting out fires. After I got off the bus, I came back and asked in detail on the computer. The leader’s description is as follows
This address, please help me see why after uploading the test paper and publishing the task, the session is gone when setting up the answer sheet
Because the background of this project was all mine at the beginning. It was developed by one person, so the problem was found quickly. The process is: the user uploads the test paper through the js component. In the method of uploading the test paper, the session is used to store the detailed information of the just uploaded test paper, such as name, suffix, ID stored in the resource table, etc. After the upload is successful, click other options on the page. , such as school, grade, difficulty level, etc., and finally click submit. In the submission processing method, it is judged at the beginning whether the session value just uploaded exists. If it does not exist, it will jump to the home page of the test paper. I printed $_SESSION in this method, but it had no value. It was strange. It worked fine before. So I asked when it started, and the leader said that when he was about to get off work in the afternoon, the teacher called and said that uploading the test paper and setting the answer sheet failed, and it kept jumping. Then I asked again if the server environment had been changed, and the leader said no.
Since there is a problem, let’s solve it. I happened to be reading the book "PHP Core Technology and Best Practices" during this time, which has a detailed description of sessions and cookies, and it also deepened my understanding of the two. So I first opened the php configuration file, found the session-related configuration items, and found that session.save_path was /data2/session. I remember that it was set to /data1/session before. How did it change? So I exited and took a look at the path. At first I thought the directory had insufficient permissions, but later I saw that there was no such directory at all. No wonder each session does not span pages. So I created a new file, set permissions, uploaded it again, and everything returned to normal.
Writing this, I also want to talk about session-related technical points. Session is stored on the server side, and is stored in files by default (session.save_handler = files). So how is session generated? Session is generated through the session_start() function. When this function is run, a file and a unique session id corresponding to it are generated in the directory where the session is stored. The data of the session file can be retrieved through the session id. Since a new seession file will be generated every time session_start() is run, how to use the previously generated session file? Just session_id($session_id), then the session file will not be newly generated, but the session id corresponding to it will be read. session file. By default, session id uses the cookie on the client (browser) to save the session id (press F12 on the chrome browser, click Resources-cookies, you can see), use $_COOKIE['PHPSESSID'] Can be obtained. That PHPSESSID is the default name of the session id. It can be set by session.name in php.ini. Use session_name() in the script to get the name of the session id. Every time the browser talks to the server, the browser will pass the session id to the server, and the server will find the corresponding session file based on the passed session id, obtain the corresponding information, and perform related operations. Once the client (browser) disables cookies, the server will not receive the session id. At this time, the session id needs to be passed explicitly. Two methods: manually pass the session id through the URL; pass the session id through the hidden form. The above two methods require that the session.use_trans_sid value in the server's PHP environment is 1.
After so much verbosity, in the end it was Linus’s words, “talk is cheap, show me the code”.
<?php session_start(); $_SESSION['arr'] = array('name' => 'molaifeng', 'hobby' => 'php'); ?> <a href="testSession.php?<?php echo session_name(); ?>=<?php echo session_id()?>">testSession</a>
<?php session_start($_REQUEST[session_name()]); print_r($_SESSION);
You can understand the code, so I won’t explain it.
Finally, to summarize, cross-page session failures generally occur due to the points listed above. 1. The session.save_path is incorrect, such as insufficient permissions, or the directory does not exist; 2. The session.use_trans_sid value in the server PHP configuration is 0; 3. Cookies are disabled on the client. But I think the frequency of the first situation should be quite high.
【updated 2018-05-21】
Going online on Friday night, I hit another trap. The framework uses CI and session writes to MySQL tables. At first, the symptoms were exactly the same as the symptoms described above, so I reset the seesion directory and gave the relevant read and write permissions, but nothing happened. Later, I discovered that the table was a memory table. I thought it exceeded the maximum value of the memory table, so I cleared the table, but the problem still persisted. Finally, after comparing the differences between the two versions, I found that two new fields were added when saving the session, so I used the elimination method, first annotated both, and then opened them one by one, and finally located the problem. It turns out that a newly added value is used to save all the values of a type table. When testing at the beginning, there were only a few values. Later, when it went online, more than a hundred values were added. At the same time, the field was only 3000 in size. It must have been bursting. So I first increased the size of the field and let it be verified online, and then changed the relevant logic so that not all values in the table were written in.
The above is the detailed content of What to do if php session doesn't work. For more information, please follow other related articles on the PHP Chinese website!