Iris_cookie和session
3. Session的使用和控制
在实际的项目开发中,我们会经常有业务场景使用到Session功能。在iris框架中,也为我们提供了方便使用,功能齐全的Session模块。Session模块的源码目录为kataras/iris/sessions包。
3.1 Session与Cookie的区别
在学习web开发过程中,我们总会和session和cookie打交道。本节课我们学习sesion相关的知识,因此有必要先通过讲解对比一下session和cookie的区别:
首先是两者的相同点。session和cookie两者都是用来存储客户的状态信息的手段。在登录、注册等动作后,可以存储相关账户的状态信息,方便程序后续跟踪及使用。
其次是不同点,讨论两者的不同点我们从几个角度来总结。首先是两者的存储位置。Cookie是存储在客户端浏览器上,方便客户端请求时使用;Session存储的相关信息存储在服务器端,用于存储客户端连接的状态信息。
其次,从可以存储的数据类型来看。Cookie仅仅支持存储字符串string一种数据类型,Session支持int、string、bool等多种数据类型,Session支持的数据类型更全更多。
3.2 Session对象创建
在实际的程序开发中,iris框架中可以非常方便的创建一个新的session对象。如下所示,即是session的创建:
- sessionID := "mySession"
- //session的创建
- sess := sessions.New(sessions.Config{
- Cookie: sessionID,
- })
3.3 支持的数据类型
在上文中,我们说过session支持的数据类型要比cookie多,我们来看一下iris框架中的session所支持存储的数据类型:
- //String:字符串类型
- session.GetString()
- //Int:无符号整形 及系列相关单位的同类型
- session.GetInt()
- //Boolean:布尔值类型
- session.GetBoolean()
- //Float:单精度数值类型 及系列相关单位的同类型
- session.GetFloat()
- //interface{}:接口 即任意数据结构类型
- session.GetFlash()
上述代码块,即列出了iris框架中所支持存储的数据类型。我们在接下来的本节课程内容中,将会演示如何进行具体使用。
3.4 Session的使用
- session := sess.Start(ctx)
- session.Set("key", "helloworld")
4. 实战项目资源导入和项目框架搭建
从本节内容开始,我们将利用我们所学习的Iris框架的相关知识,进行实战项目开发。
4.1 实战项目框架搭建
我们的实战项目是使用Iris框架开发一个关于本地服务平台的后台管理平台。平台中可以管理用户、商品、商铺等相关的信息,平台可以实时展示用户、商品等相关监测数据的变化情况。通过此项目,旨在能够将Iris框架相关的知识得到巩固和练习。 如下是项目框架搭建后的说明:
config:项目配置文件及读取配置文件的相关功能
controller:控制器目录、项目各个模块的控制器及业务逻辑处理的所在目录
datasource:实现mysql连接和操作、封装操作mysql数据库的目录。
model:数据实体目录,主要是项目中各业务模块的实体对象的定义
service:服务层目录。用于各个模块的基础功能接口定义及实现,是各个模块的数据层。
static:配置项目的静态资源目录。
util:提供通用的方法封装。
main.go:项目程序主入口
config.json:项目配置文件。
5. 代码
- package main
- import (
- "github.com/kataras/iris/sessions"
- "github.com/kataras/iris"
- "github.com/kataras/iris/context"
- "github.com/kataras/iris/sessions/sessiondb/boltdb"
- )
- var (
- USERNAME = "userName"
- ISLOGIN = "isLogin"
- )
- //Session的使用和控制
- func main() {
- app := iris.New()
- sessionID := "mySession"
- //1.创建session并进行使用
- sess := sessions.New(sessions.Config{
- Cookie: sessionID,
- })
- //用户登录功能
- app.Post("/login", func(context context.Context) {
- path := context.Path()
- app.Logger().Info(" 请求Path:", path)
- userName := context.PostValue("name")
- passwd := context.PostValue("pwd")
- if userName == "davie" && passwd == "pwd123" {
- session := sess.Start(context)
- //用户名
- session.Set(USERNAME, userName)
- //登录状态
- session.Set(ISLOGIN, true)
- context.WriteString("账户登录成功 ")
- } else {
- session := sess.Start(context)
- session.Set(ISLOGIN, false)
- context.WriteString("账户登录失败,请重新尝试")
- }
- })
- //用户退出登录功能
- app.Get("/logout", func(context context.Context) {
- path := context.Path()
- app.Logger().Info(" 退出登录 Path :", path)
- session := sess.Start(context)
- //删除session
- session.Delete(ISLOGIN)
- session.Delete(USERNAME)
- context.WriteString("退出登录成功")
- })
- app.Get("/query", func(context context.Context) {
- path := context.Path()
- app.Logger().Info(" 查询信息 path :", path)
- session := sess.Start(context)
- isLogin, err := session.GetBoolean(ISLOGIN)
- if err != nil {
- context.WriteString("账户未登录,请先登录 ")
- return
- }
- if isLogin {
- app.Logger().Info(" 账户已登录 ")
- context.WriteString("账户已登录")
- } else {
- app.Logger().Info(" 账户未登录 ")
- context.WriteString("账户未登录")
- }
- })
- //2.session和db绑定使用
- //boltdb键值对的输数据库
- db, err := boltdb.New("sessions.db", 0600) //0600操作权限
- if err != nil {
- panic(err.Error())
- }
- //程序中断时,将数据库关闭
- iris.RegisterOnInterrupt(func() {
- defer db.Close()
- })
- //session和db绑定
- sess.UseDatabase(db)
- app.Run(iris.Addr(":8009"), iris.WithoutServerError(iris.ErrServerClosed))
- }
Iris_cookie和session的更多相关文章
- session实现购物车
为实现简单的购物功能(购物车添加.账户查看.购物车商品删除.实时的购物商品数量及价格的计算显示.购物车商品数量可手动输入等),用session实现了一简单的以php语言为基础.连接MySQL数据库的购 ...
- Asp.net Core中使用Session
前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. 元旦放假在家写了个Asp.net Core验证码登录, 做demo的过程中遇到两个小问题,第一是在Asp.net Cor ...
- 懒加载session 无法打开 no session or session was closed 解决办法(完美解决)
首先说明一下,hibernate的延迟加载特性(lazy).所谓的延迟加载就是当真正需要查询数据时才执行数据加载操作.因为hibernate当中支持实体对象,外键会与实体对象关联起来.如 ...
- 探索ASP.NET MVC5系列之~~~6.Session篇(进程外Session)
其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...
- Nhibernate的Session管理
参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需 ...
- nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...
- zookeeper源码分析之六session机制
zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...
- [转载]Cookie/Session的机制与安全
Cookie和Session是为了在无状态的HTTP协议之上维护会话状态,使得服务器可以知道当前是和哪个客户在打交道.本文来详细讨论Cookie和Session的实现机制,以及其中涉及的安全问题. 因 ...
- 修改session垃圾回收几率
<?php //修改session垃圾回收几率 ini_set('session.gc_probability','1'); ini_set('session.gc_divisor','2'); ...
随机推荐
- Java_Day8
Java learning_Day8 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA> 提 ...
- 关于java静态存储类的一个知识点
今天在写代码的时候产生了一个很奇怪的问题:静态类里的数据在其他类中更改之后,是否会保存 然后就动手试验了一下,结果是 ·在更改数据的类中,输出数据都是更够以后的数据 ·在先执行更改数据的类之后执行第二 ...
- Linux虚拟文件系统–VFS简介
http://www.embeddedlinux.org.cn/emb-linux/file-system/201712/20-7907.html 导读 Linux中可以支持多种文件系统,而且支持各种 ...
- 异常处理_python
一.异常处理格式: name=[1,2]data={}try: name[3] data['name']except (KeyError,IndexError) as e : #捕捉指定的几个错误类型 ...
- Hive0.13_函数
Hive函数大全 一.关系运算: 1. 等值比较: = 2. 等值比较:<=> 3. 不等值比较: <>和!= 4. 小于比较: < 5. 小于等于比较: <= 6 ...
- AtCoder Beginner Contest 154 题解
人生第一场 AtCoder,纪念一下 话说年后的 AtCoder 比赛怎么这么少啊(大雾 AtCoder Beginner Contest 154 题解 A - Remaining Balls We ...
- Python里的Flask开发环境的搭建
在已经安装好了Python后,我这里用的是Python3.5,准备进一步学习Flask框架,下面记录搭建Flask环境 这里使用了虚拟环境,在虚拟环境里,最小化的安装Flask. 参考步骤: 1.首先 ...
- JS图片轮换
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- C++类this指针为空时的几个误区
代码: class test{ public: static void f1(){cout<<y<<endl;} void f2(){cout<<y<< ...
- c语言该怎么入门?C语言入门教程(非常详细)
C语言是一门面向过程的编译型语言,它的运行速度极快,仅次于汇编语言.C语言是计算机产业的核心语言,操作系统.硬件驱动.关键组件.数据库等都离不开C语言:不学习C语言,就不能了解计算机底层. 这套「C语 ...