【问题标题】:Weird bug where session information is lost in Flask application [duplicate]Flask 应用程序中会话信息丢失的奇怪错误 [重复]
【发布时间】:2017-12-15 22:25:26
【问题描述】:

我遇到了一个奇怪的问题,我在烧瓶会话中设置了一些值。我花了几次尝试来重复这个错误,但这就是它失败的方式。

  • 我以私密模式打开我的页面并登录。
  • 我填写表格并提交,我收到Internal Server Error 500
  • 我的日志文件没有捕获错误,所以我创建了另一个日志文件来捕获会话的值 (log_file2)。有了这个,我可以看到我所有的会话值都消失了(不知道如何)。
  • 我在main() 的末尾创建了一个log_file2,我的所有值都在那里,但是当我输入保存时,它们都不在那里。

现在,有趣的部分来了:

如果我收到错误,请关闭窗口,稍等片刻,然后重新打开(再次私下)我可以再次复制错误。但是,如果在我收到错误后我再次登录,我填写我的表格并提交,它工作得很好,我没有收到任何错误,我的会话值都在那里。我关闭了私人窗口,几分钟后重新打开并尝试提交我的表单(使用同一用户),它运行良好。我又试了一次,但我刚刚创建了一个用户(新的私人窗口),它给了我错误。问题是,在生产中,错误出现一次,用户重试,他可以完美提交,直到几天后错误再次出现一次。我真的很难确定这可能是什么。这是我第一次制作烧瓶网络应用程序,所以也许我遗漏了一些东西。

您能给我的任何帮助将不胜感激。

这是代码:

@app.route("/main")
def main():
    session.permanent = True

    try:
        if 'user' in session and 'client' in session and 'user_uid' in session:
            session['start_date'] = datetime.now().strftime('%Y%m%d')
            session['start_time'] = datetime.now().strftime('%H%M')
            context = {
                'discipline': session['discipline']
            }
            log_file2('None necessary')
            return render_template('main.html', context=context)
        else:
            session.clear()
            return redirect(url_for('login'))
    except Exception as ex:
        log_file(str(ex), 'main')


@app.route("/save", methods=['POST'])
def save():
    session.permanent = True

    log_file2(request.form.to_dict())

    form_fields = Fields.get_fields_with_attr(session['client'])
    values = request.form.to_dict()
    try:
        visit_uid = str(uuid4())
        img_data = values['sig-data']
        img = base64.b64decode(img_data)
        with open(join(dirname(realpath(__file__)), "static/img/sigs/{0}.png".format(visit_uid)), "wb") as fh:
            fh.write(img)

        if 'on-site' in values:
            values['on-site'] = 1
            values['visit-date'] = session['start_date']
            values['time-arrival'] = session['start_time']
            values['time-finish'] = datetime.now().strftime('%H%M')
        else:
            values['on-site'] = 0
            visitDate = datetime.strptime(values['visit-date'], '%Y-%m-%d')
            values['visit-date'] = visitDate.strftime('%Y%m%d')
            timeArrival = datetime.strptime(values['time-arrival'], '%I:%M %p')
            values['time-arrival'] = timeArrival.strftime('%H%M')
            timeFinish = datetime.strptime(values['time-finish'], '%I:%M %p')
            values['time-finish'] = timeFinish.strftime('%H%M')

        datetime_object = datetime.strptime(values['time-leave'], '%I:%M %p')
        time_string = datetime_object.strftime('%H%M')
        values['time-leave'] = time_string
        values['emp-num'] = session['user']

        Visit.prepare_fields(values, session['user_uid'], form_fields, visit_uid)
        session.clear()
        return redirect(url_for('login'))
    except Exception as ex:
        log_file(str(ex), 'save')

【问题讨论】:

    标签: python flask


    【解决方案1】:

    经过大量调查和阅读,问题在于我使用os.urandom(24) 作为我的密钥。我用该函数生成了一个字符串并替换了该字符串的函数,它现在可以正常工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多