如何将Web应用中Telegram Login Widget的登录会话过期时间设置为24小时?
调整Telegram Login Widget登录会话有效期为24小时
首先得明确:Telegram Login Widget本身并不会直接设置6个月有效期的Cookie——这个长有效期的Cookie其实是你的Web应用在用户登录成功后自行生成的会话凭证。要改成24小时,核心是在后端处理登录回调时,自定义会话Cookie的过期时间。
下面是具体的实现步骤:
1. 先理清Telegram登录的核心流程
当用户通过Widget完成Telegram授权后,Telegram会把用户信息(包含id、first_name、auth_date等)和验证哈希hash发送到你预先指定的auth_url回调地址。你的后端需要先验证这个请求的合法性,确认用户身份无误后,再创建应用自己的会话。
2. 在后端显式设置会话Cookie的有效期
验证通过后,别用框架默认的会话过期时间(很多框架默认会设成几个月),而是手动设置Cookie的max-age或expires参数为24小时。这里给几个常见后端技术栈的示例:
Node.js (Express)
// 先省略验证Telegram回调哈希的逻辑 app.post('/telegram-auth', (req, res) => { const validUser = { id: req.body.id, name: req.body.first_name }; // 设置会话Cookie,有效期24小时(换算成毫秒) res.cookie('user_session', JSON.stringify(validUser), { maxAge: 86400 * 1000, httpOnly: true, secure: process.env.NODE_ENV === 'production' // 生产环境开HTTPS时启用 }); res.redirect('/dashboard'); });
Python (Django)
from django.http import HttpResponseRedirect import json def telegram_auth(request): # 省略Telegram请求合法性验证步骤 user_data = {'id': request.POST.get('id'), 'name': request.POST.get('first_name')} response = HttpResponseRedirect('/dashboard') # 设置Cookie有效期为24小时(秒为单位) response.set_cookie( 'user_session', json.dumps(user_data), max_age=86400, httponly=True, secure=request.is_secure() ) return response
PHP
// 先完成Telegram回调请求的验证 $userData = [ 'id' => $_POST['id'], 'name' => $_POST['first_name'] ]; // 设置Cookie,有效期为当前时间+24小时 setcookie( 'user_session', json_encode($userData), time() + 86400, '/', '', isset($_SERVER['HTTPS']), true // 开启httponly,提升安全性 ); header('Location: /dashboard'); exit;
3. 额外需要注意的点
- 如果你用的是会话管理框架(比如Express的
express-session、Django的django-sessions),需要修改框架的会话配置,把cookie.maxAge(或对应参数)设置为24小时。 - 别忘了验证
auth_date:Telegram返回的auth_date是授权的Unix时间戳,建议检查这个时间是否在最近15分钟内,防止重放攻击——这和会话Cookie有效期是分开的安全措施。 - 生产环境下一定要开启
httpOnly和secure属性,降低Cookie被窃取的风险。
内容的提问来源于stack exchange,提问作者Ramon
相关产品推荐
相关产品推荐

