sessions.inc.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. // Start session
  3. ini_set("session.cookie_httponly", 1);
  4. if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
  5. strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == "https") {
  6. ini_set("session.cookie_secure", 1);
  7. $IS_HTTPS = true;
  8. }
  9. elseif (isset($_SERVER['HTTPS'])) {
  10. ini_set("session.cookie_secure", 1);
  11. $IS_HTTPS = true;
  12. }
  13. else {
  14. $IS_HTTPS = false;
  15. }
  16. session_set_cookie_params($GLOBALS['SESSION_LIFETIME'], '/', $_SERVER['SERVER_NAME'], $IS_HTTPS, true);
  17. session_start();
  18. // Handle logouts
  19. if (isset($_POST["logout"])) {
  20. if (isset($_SESSION["dual-login"])) {
  21. $_SESSION["mailcow_cc_username"] = $_SESSION["dual-login"]["username"];
  22. $_SESSION["mailcow_cc_role"] = $_SESSION["dual-login"]["role"];
  23. unset($_SESSION["dual-login"]);
  24. }
  25. else {
  26. session_regenerate_id(true);
  27. session_unset();
  28. session_destroy();
  29. session_write_close();
  30. header("Location: /");
  31. }
  32. }
  33. // Set session IP and UA
  34. if (!isset($_SESSION['SESS_REMOTE_IP'])) {
  35. $_SESSION['SESS_REMOTE_IP'] = $_SERVER['REMOTE_ADDR'];
  36. }
  37. if (!isset($_SESSION['SESS_REMOTE_UA'])) {
  38. $_SESSION['SESS_REMOTE_UA'] = $_SERVER['HTTP_USER_AGENT'];
  39. }
  40. // Check session
  41. function session_check() {
  42. if (!isset($_SESSION['SESS_REMOTE_IP']) || !isset($_SESSION['SESS_REMOTE_UA'])) {
  43. return false;
  44. }
  45. if ($_SESSION['SESS_REMOTE_IP'] != $_SERVER['REMOTE_ADDR']) {
  46. return false;
  47. }
  48. if ($_SESSION['SESS_REMOTE_UA'] != $_SERVER['HTTP_USER_AGENT']) {
  49. return false;
  50. }
  51. return true;
  52. }
  53. if (isset($_SESSION['mailcow_cc_role']) && session_check() === false) {
  54. session_regenerate_id(true);
  55. session_unset();
  56. session_destroy();
  57. session_write_close();
  58. header("Location: /");
  59. }