`

beego session删除小缺陷

阅读更多

使用beego session的同学,不知道发现没有,删除session的时候有个小bug,当session中只剩一个key-value时,无法删除;
查看代码(这里只举例mysql,其他的session存储也一样存在这个问题),发现:
删除session代码:
func (st *MysqlSessionStore) Delete(key interface{}) error {
    st.lock.Lock()
    defer st.lock.Unlock()
    delete(st.values, key)
    return nil
}

更新session代码:
func (st *MysqlSessionStore) SessionRelease() {
    defer st.c.Close()
    if len(st.values) > 0 {
        b, err := encodeGob(st.values)
        if err != nil {
            return
        }
        st.c.Exec("UPDATE session set `session_data`= ? where session_key=?", b, st.sid)
    }
}

这样,当session中只有一个key-value时,我们删除session后,st.values就为空了,也就不满足条件 len(st.values)>0了,那么久无法更新session到持久化了,这样,最后一个key-value的session永远无法删除;解决方法就是直接把 if len(st.values) > 0   条件去掉即可;

分享到:
评论

相关推荐

    微信小程序实现Session功能及无法获取session问题的解决方法

    因为小程序原生不支持Cookie,因此也不支持Session。 网上找到的的一些方法有缺陷,而且很多累赘,估计没有实际测试过,在此直接给出实测可用的代码。 大概思路就是借助小程序本地储存+网络请求的header可读可写来...

    beego官方开发文档

    beego社区活跃,提供了丰富的第三方插件和扩展,如beego orm、beego session、beego cache等,这些扩展可以帮助开发者实现更多功能。 15. **最佳实践** 学习beego的同时,理解Go语言的最佳实践也是必不可少的,...

    session监听小例子

    提供了四个方法,`attributeAdded(HttpSessionBindingEvent se)`、`attributeRemoved(HttpSessionBindingEvent se)`、`attributeReplaced(HttpSessionBindingEvent se)`分别用于监听Session属性添加、删除和替换的...

    beego框架图形验证码实现

    【beego框架图形验证码实现】是使用Go语言开发的一个高效且功能丰富的图形验证码库,它为Web应用提供了安全的验证码生成服务。这个库的核心目的是为了防止自动化程序(如机器人)进行非法操作,如批量注册、恶意登录...

    beego官方中文教程

    beego提供了丰富的内置中间件,如session管理、缓存控制等,可以在控制器中轻松集成。 5. **模型(Model)** 模型层主要用于数据处理,包括数据的读写操作。beego支持多种数据库,如MySQL、PostgreSQL等,通过orm...

    beego中文开发文档

    - **CRUD操作**:创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)操作的支持。 - **高级查询**:支持复杂查询需求。 - **原生SQL查询**:允许直接执行SQL语句。 - **事物处理**:支持事务管理以确保数据...

    开源项目-lcbluestorm-ssdb-session.zip

    【开源项目-lcbluestorm-ssdb-session.zip】是一个基于Go语言编写的开源项目,主要目的是为Beego框架提供一种高效、可靠的session管理解决方案。Beego是一个流行的Go语言Web应用框架,它提供了丰富的功能来简化Web...

    session session session szsessdifn

    【session session session szsessdifn】 在Web开发中,Session是一个至关重要的概念,尤其是在ASP.NET框架下。Session机制是服务器端存储用户特定信息的一种方式,它允许开发者在多个页面之间保持用户状态,解决了...

    Beego中文文档PDF

    6. 内置模块:Beego框架内置了多个功能强大的模块,例如Session管理、缓存操作、日志记录、配置解析、性能监控、上下文操作、ORM模块、请求模拟等,这些模块使得开发者可以快速实现各种复杂功能。 7. 热编译和热...

    ASP.NET的 Session 详解

    鉴于 ASP Session 的以上缺陷,微软的设计者们在设计开发 ASP.NET Session 时进行了相应的改进,完全克服了以上缺陷,使得 ASP.NET Session 成为了一个更加强大的功能。 Web.config 文件简介 有的 ASP.NET 程序员...

    删除Session里面特定的值

    在探讨“删除Session里面特定的值”的过程中,我们需要先了解Session的基本概念以及如何有效地管理和操作存储在Session中的数据。Session是一种服务器端技术,用于跟踪用户的会话状态。它通过为每个用户分配一个唯一...

    一个关于Session的小demo

    本小demo以JSP为基础,旨在帮助初学者理解并掌握Session的使用方法。 首先,我们来解释一下什么是Session。Session是服务器端存储的一个数据结构,用于保存用户特定的信息,比如用户的登录状态、购物车内容等。当...

    退出页面自动清除session技巧

    这种方法适用于仅需要删除特定属性的情况。 2. **使用`invalidate()`方法彻底清除Session** 当需要彻底清除整个Session时,可以调用`invalidate()`方法: ```java session.invalidate(); ``` 该方法会清除与...

    自己实现的spring-session

    如果没有sessionId就新创建session,如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建session,并把redis中此session的相关数据赋值给新建的session,最后保存sessionId...

    session驱动类 session存入数据库

    session驱动类 session存入数据库 数据库存储session 用于session存入数据库

    SESSION购物车SESSION购物车SESSION购物车

    SESSION购物车是实现这一功能的一种常见技术手段,它基于Web服务器的SESSION机制。本文将深入探讨SESSION购物车的概念、工作原理以及在实际应用中的重要性。 SESSION是一种服务器端存储用户状态的方法,当用户访问...

    asp.net-c#写的一个cookie和session登陆小实验

    在这个"asp.net-c#写的一个cookie和session登陆小实验"中,我们主要关注的是两种在Web开发中常用的用户状态管理技术:Cookie和Session。 Cookie是服务器在客户端(用户浏览器)上存储的小型文本文件。它包含了特定...

    基于beego开发的失物招领网站

    另外,beego内置了session管理和缓存机制,对于用户状态的保持和高并发场景下的性能优化至关重要。 为了增强用户体验,前端可能采用了React或Vue.js等现代前端框架,实现页面的动态加载和组件化开发。同时,网站...

    jsp 的session实现小的购物车的功能

    在Java服务器页面(JSP)中,Session是用于在用户会话之间存储数据的重要机制,尤其在实现诸如购物车这样的功能时。购物车通常需要跟踪用户的选购商品,即使用户在不同页面之间导航,这些信息也需要被保留。在这个...

    spring session redis分布式session

    Spring Session通过与Redis的集成,将Session数据序列化后存储到Redis中,每次请求时从Redis读取Session数据,确保了多服务器间的Session一致性。 **3. 集成Spring Session与Redis** 首先,你需要在项目中添加...

Global site tag (gtag.js) - Google Analytics