Setting up a session save path in php » History » Version 3
Gareth Eaton, 10/12/2023 03:01 PM
1 | 1 | Gareth Eaton | h1. Setting up a session save path in php |
---|---|---|---|
2 | |||
3 | I recently encountered an issue with Nextcloud where I kept experiencing unwanted logouts, leading to frustrating login loops. After some research and trial-and-error, I managed to find a solution that worked for me. |
||
4 | |||
5 | |||
6 | After a few clicks in the Nextclouds Web interface, especially in the Files page, I get the message: |
||
7 | |||
8 | *"Problem loading the page, reloading in 5 seconds"* |
||
9 | After 5 seconds I am logged out and have to login again. Having a look into the log-file there you can find the following entry: |
||
10 | |||
11 | *"app":"no app in context","message":"Current user is not logged in"* |
||
12 | |||
13 | |||
14 | 2 | Gareth Eaton | | *Note* I've discovered that you may need to create the 'tmp' directory within the Nextcloud folder at '/var/www/html/nextcloud'. |
15 | This can cause issues during updates as it may flag the directory. In such cases, you'll have to remove it and reinstall it later. |
||
16 | To avoid this problem, you can install Nextcloud in the '/var' directory. While this usually works, there have been instances where it didn't work for me. | |
||
17 | |||
18 | |||
19 | |||
20 | 1 | Gareth Eaton | Solution: |
21 | The solution involves configuring the php.ini file, which controls how PHP handles various settings on the server. Specifically, I focused on the session.save_path setting, which determines where PHP stores temporary session data for user logins. |
||
22 | |||
23 | 2 | Gareth Eaton | | Create a Temporary Directory: |
24 | If you're setting up Nextcloud in the '/var/' directory, you can likely skip this step. However, if you're installing it in the Nextcloud directory, you'll need to create a new folder. To do this, I initially established a fresh directory called 'tmp' within my Nextcloud installation path, which in my case was '/var/www/html/nextcloud.' This 'tmp' directory serves as the location where PHP stores temporary session data. | |
||
25 | |||
26 | |||
27 | 1 | Gareth Eaton | |
28 | |||
29 | Create the "tmp" Directory: |
||
30 | |||
31 | You can use the mkdir command to create the "tmp" directory in the /var directory. Open your terminal and run: |
||
32 | |||
33 | |||
34 | <pre> |
||
35 | 3 | Gareth Eaton | sudo mkdir /var/tmp-session |
36 | 1 | Gareth Eaton | </pre> |
37 | |||
38 | 3 | Gareth Eaton | This will create the "tmp-session" directory within /var. |
39 | 1 | Gareth Eaton | |
40 | Set Permissions: |
||
41 | |||
42 | 3 | Gareth Eaton | Set the correct permissions for the "tmp-session" directory using chmod 750: |
43 | 1 | Gareth Eaton | |
44 | |||
45 | <pre> |
||
46 | 3 | Gareth Eaton | sudo chmod 750 /var/tmp-session |
47 | 1 | Gareth Eaton | </pre> |
48 | |||
49 | This ensures that the directory is readable, writable, and executable by the owner (root) and the group. |
||
50 | |||
51 | 3 | Gareth Eaton | <pre> |
52 | sudo chown www-data:www-data /var/tmp-session |
||
53 | </pre> |
||
54 | |||
55 | The command sudo chown www-data:www-data /var/tmp-session changes the ownership of the directory /var/tmp-session to the user and group www-data. |
||
56 | |||
57 | |||
58 | 1 | Gareth Eaton | Configure php.ini: |
59 | |||
60 | Open the php.ini file for editing: |
||
61 | |||
62 | |||
63 | <pre> |
||
64 | sudo nano /etc/php/<version>/apache2/php.ini |
||
65 | </pre> |
||
66 | |||
67 | Replace <version> with the PHP version you're using. For example: |
||
68 | |||
69 | <pre> |
||
70 | sudo nano /etc/php/8.1/apache2/php.ini |
||
71 | </pre> |
||
72 | |||
73 | Find the session.save_path directive and update it to use the new "/var/tmp" directory: |
||
74 | |||
75 | |||
76 | <pre> |
||
77 | 3 | Gareth Eaton | session.save_path = "/var/tmp-session" |
78 | 1 | Gareth Eaton | </pre> |
79 | |||
80 | Save your changes and exit the text editor. |
||
81 | |||
82 | Restart Apache Web Server: |
||
83 | |||
84 | Finally, restart the Apache web server to apply the changes to the PHP configuration: |
||
85 | |||
86 | |||
87 | <pre> |
||
88 | sudo service apache2 restart |
||
89 | </pre> |
||
90 | |||
91 | |||
92 | Why This Works: |
||
93 | The unwanted logouts and login loops were likely caused by issues with session management. By creating a custom temporary directory and configuring PHP's session.save_path to use it, I ensured that session data was stored reliably. This prevents Nextcloud from losing track of my authentication status, thus stopping the annoying logouts and loops. |