如何通过ulimit设置用户会话超时时间,以延长在线阅读的连续性?
- 内容介绍
- 文章标签
- 相关推荐
在线阅读已成为人们获取信息和娱乐的关键方式。只是使用者在连续阅读数小时后往往会遇到会话突然失效的问题。这不仅打断阅读体验,还可能导致已读内容丢失、需要重复登录、甚至出现安全风险。按理说,为了解决这一痛点,可以通过ulimit命令来设置使用者会话超时时间。从而延长在线阅读的连续性。
为什么要延长会话超时时间?
- 避免频繁登录每次会话失效都需要重新输入账号密码,极大地影响了使用者体验。
- 节省服务器配置资源短暂失效后程序需重新分配资源,对服务器造成额外负担。
- 提高安全性与稳定性合理限制会话时间可以防止恶意利用,但也要兼顾正常使用需求。
常见使用者痛点
- 阅读中断: 长时间浏览文章或文档时会话过期导致页面刷新或跳转到登录页。不过,
- 数据丢失: 未保存的笔记或书签因超时被清除。
- : 当设备离开监控范围后旧会话仍可能被滥用。
- : 服务器不断创建和销毁 session 对象。
一、临时设置 ultiam 超时时间
ulimit -t 1800 # 设置 CPU 时间限制为 30 分钟
ulimit -n 4096 # 设置文件描述符上限为 4096 个
此方法适用于快速测试或临时调整,但重启终端后设置将失效。若想在每次登录时自动生效,请继续查看下方永久配置方法。
二、永久配置 ultiam 限制
- /etc/security/limits.conf
- /etc/profile 或 /etc/bash.bashrc/ ~/.bashrc
- PAM limits 模块
-
Edit
/etc/sysctl.conf: -
Edit service file :
LimitCPU=1800s # Set CPU time limit for service process LimitNOFILE=4096 # Set file descriptor limit Restart=on-failure # Optional: restart on failure for reliability
-
No need to reload kernel;simply run:
systemctl daemon-reload && systemctl restart yourservice.service
-
Add to global or user-specific shell config:
export TMOUT=900 # 自动注销空闲终端 readonly TMOUT # 防止脚本修改值 shopt -s checkwinsize # 可选:保持窗口尺寸一致,以免出现布局错乱。
- This setting only applies to interactive bash shells;it doesn't affect scripts or non-interactive sessions.
-
在
nginx或gunicorn配置文件里把worker_rlimit_cpu设置为1800秒; -
在 Flask 中把
permanent_session_lifetime设置为更大的值; - 在前端添加心跳请求 保持连接活跃。
- “临时”与 “永久”;根据实际业务场景选择合适的方法;如果是短期实验可用 “临时”,长期稳定运行则建议写入配置文件并重新启动;
- “TMOUT” 是一个非常有用但易忽略的工具,用来防止空闲终端被意外保留。请务必确认它仅在交互式 Bash 中生效,并考虑是否需要加上 readonly 属性以防篡改;
- “PAM limits”;话说回来,对于 Linux 程序而言,这是最可靠且通用的方法。因为它由 PAM 层统一管理,并支持多种认证方式;其实,
- “SYSTEMD & Kernel 参数”;如果你部署的是现代 Linux 并使用 systemd。可以直接在 unit 文件里指定资源限制,从而避免手动维护多个配置文件;
- “User Experience>Security &>Performance>;永远记住技术方法应以最小干扰达到最大效果,而不是盲目提高限制导致程序崩溃或不必要的安全漏洞;
Add following lines :
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 4096
Add commands:
ulimit -t 1800 # CPU time limit
ulimit -n 4096 # Max open files
export TMOUT=600 # Optional: logout after inactivity
readonly TMOUT
Edit /etc/pam.d/common-session-local,ensure line exists:
session required pam_limits.so
# Maximum number of threads per process
kernel.threads-max = 2048
# Maximum number of processes per user
kernel.pid_max = 65535
# Apply changes immediately
sysctl -p
三、结合 Flask Session 的实战示例
python from flask import Flask,session app = Flask app.secret_key = 'super-secret-key' app.permanent_session_lifetime = timedelta @app.route def index: session.permanent = True # 开启永久 Session 模式 return 'Hello!Your session will last up to two hours of inactivity.' if __name__ == '__main__': app.run 再看**注意**。Flask 的 `permanent_session_lifetime` 控制的是 *HTTP Cookie* 的有效期,而不是程序层面的 ``ULIMIT`` 限制。 两者可以配合使用,例如:这样就能兼顾程序安全与使用者体验。
技术博客 ©2024 — 这篇文章提供参考示例,请根据自身环境调整一下并测试验证后再上线生产环境。其实,
在线阅读已成为人们获取信息和娱乐的关键方式。只是使用者在连续阅读数小时后往往会遇到会话突然失效的问题。这不仅打断阅读体验,还可能导致已读内容丢失、需要重复登录、甚至出现安全风险。按理说,为了解决这一痛点,可以通过ulimit命令来设置使用者会话超时时间。从而延长在线阅读的连续性。
为什么要延长会话超时时间?
- 避免频繁登录每次会话失效都需要重新输入账号密码,极大地影响了使用者体验。
- 节省服务器配置资源短暂失效后程序需重新分配资源,对服务器造成额外负担。
- 提高安全性与稳定性合理限制会话时间可以防止恶意利用,但也要兼顾正常使用需求。
常见使用者痛点
- 阅读中断: 长时间浏览文章或文档时会话过期导致页面刷新或跳转到登录页。不过,
- 数据丢失: 未保存的笔记或书签因超时被清除。
- : 当设备离开监控范围后旧会话仍可能被滥用。
- : 服务器不断创建和销毁 session 对象。
一、临时设置 ultiam 超时时间
ulimit -t 1800 # 设置 CPU 时间限制为 30 分钟
ulimit -n 4096 # 设置文件描述符上限为 4096 个
此方法适用于快速测试或临时调整,但重启终端后设置将失效。若想在每次登录时自动生效,请继续查看下方永久配置方法。
二、永久配置 ultiam 限制
- /etc/security/limits.conf
- /etc/profile 或 /etc/bash.bashrc/ ~/.bashrc
- PAM limits 模块
-
Edit
/etc/sysctl.conf: -
Edit service file :
LimitCPU=1800s # Set CPU time limit for service process LimitNOFILE=4096 # Set file descriptor limit Restart=on-failure # Optional: restart on failure for reliability
-
No need to reload kernel;simply run:
systemctl daemon-reload && systemctl restart yourservice.service
-
Add to global or user-specific shell config:
export TMOUT=900 # 自动注销空闲终端 readonly TMOUT # 防止脚本修改值 shopt -s checkwinsize # 可选:保持窗口尺寸一致,以免出现布局错乱。
- This setting only applies to interactive bash shells;it doesn't affect scripts or non-interactive sessions.
-
在
nginx或gunicorn配置文件里把worker_rlimit_cpu设置为1800秒; -
在 Flask 中把
permanent_session_lifetime设置为更大的值; - 在前端添加心跳请求 保持连接活跃。
- “临时”与 “永久”;根据实际业务场景选择合适的方法;如果是短期实验可用 “临时”,长期稳定运行则建议写入配置文件并重新启动;
- “TMOUT” 是一个非常有用但易忽略的工具,用来防止空闲终端被意外保留。请务必确认它仅在交互式 Bash 中生效,并考虑是否需要加上 readonly 属性以防篡改;
- “PAM limits”;话说回来,对于 Linux 程序而言,这是最可靠且通用的方法。因为它由 PAM 层统一管理,并支持多种认证方式;其实,
- “SYSTEMD & Kernel 参数”;如果你部署的是现代 Linux 并使用 systemd。可以直接在 unit 文件里指定资源限制,从而避免手动维护多个配置文件;
- “User Experience>Security &>Performance>;永远记住技术方法应以最小干扰达到最大效果,而不是盲目提高限制导致程序崩溃或不必要的安全漏洞;
Add following lines :
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 4096
Add commands:
ulimit -t 1800 # CPU time limit
ulimit -n 4096 # Max open files
export TMOUT=600 # Optional: logout after inactivity
readonly TMOUT
Edit /etc/pam.d/common-session-local,ensure line exists:
session required pam_limits.so
# Maximum number of threads per process
kernel.threads-max = 2048
# Maximum number of processes per user
kernel.pid_max = 65535
# Apply changes immediately
sysctl -p
三、结合 Flask Session 的实战示例
python from flask import Flask,session app = Flask app.secret_key = 'super-secret-key' app.permanent_session_lifetime = timedelta @app.route def index: session.permanent = True # 开启永久 Session 模式 return 'Hello!Your session will last up to two hours of inactivity.' if __name__ == '__main__': app.run 再看**注意**。Flask 的 `permanent_session_lifetime` 控制的是 *HTTP Cookie* 的有效期,而不是程序层面的 ``ULIMIT`` 限制。 两者可以配合使用,例如:这样就能兼顾程序安全与使用者体验。
技术博客 ©2024 — 这篇文章提供参考示例,请根据自身环境调整一下并测试验证后再上线生产环境。其实,

