1
0
mirror of https://github.com/astaxie/beego.git synced 2024-06-28 15:44:14 +00:00

update output.Cookie

This commit is contained in:
slene 2014-02-22 11:12:57 +08:00
parent 002e0854ab
commit 03037170e1

View File

@ -77,43 +77,59 @@ func (output *BeegoOutput) Cookie(name string, value string, others ...interface
var b bytes.Buffer var b bytes.Buffer
fmt.Fprintf(&b, "%s=%s", sanitizeName(name), sanitizeValue(value)) fmt.Fprintf(&b, "%s=%s", sanitizeName(name), sanitizeValue(value))
if len(others) > 0 { if len(others) > 0 {
switch others[0].(type) { switch v := others[0].(type) {
case int: case int:
if others[0].(int) > 0 { if v > 0 {
fmt.Fprintf(&b, "; Max-Age=%d", others[0].(int)) fmt.Fprintf(&b, "; Max-Age=%d", v)
} else if others[0].(int) < 0 { } else if v < 0 {
fmt.Fprintf(&b, "; Max-Age=0") fmt.Fprintf(&b, "; Max-Age=0")
} }
case int64: case int64:
if others[0].(int64) > 0 { if v > 0 {
fmt.Fprintf(&b, "; Max-Age=%d", others[0].(int64)) fmt.Fprintf(&b, "; Max-Age=%d", v)
} else if others[0].(int64) < 0 { } else if v < 0 {
fmt.Fprintf(&b, "; Max-Age=0") fmt.Fprintf(&b, "; Max-Age=0")
} }
case int32: case int32:
if others[0].(int32) > 0 { if v > 0 {
fmt.Fprintf(&b, "; Max-Age=%d", others[0].(int32)) fmt.Fprintf(&b, "; Max-Age=%d", v)
} else if others[0].(int32) < 0 { } else if v < 0 {
fmt.Fprintf(&b, "; Max-Age=0") fmt.Fprintf(&b, "; Max-Age=0")
} }
} }
} }
if len(others) > 1 { if len(others) > 1 {
if len(others[1].(string)) == 0 { if v, ok := others[1].(string); ok && len(v) > 0 {
fmt.Fprintf(&b, "; Path=%s", '/') fmt.Fprintf(&b, "; Path=%s", sanitizeValue(v))
} else { } else {
fmt.Fprintf(&b, "; Path=%s", sanitizeValue(others[1].(string))) fmt.Fprintf(&b, "; Path=%s", '/')
} }
} }
if len(others) > 2 && len(others[2].(string)) > 0 { if len(others) > 2 {
fmt.Fprintf(&b, "; Domain=%s", sanitizeValue(others[2].(string))) if v, ok := others[2].(string); ok && len(v) > 0 {
fmt.Fprintf(&b, "; Domain=%s", sanitizeValue(v))
}
} }
if len(others) > 3 && others[3].(bool) { if len(others) > 3 {
fmt.Fprintf(&b, "; Secure") var secure bool
switch v := others[3].(type) {
case bool:
secure = v
default:
secure = true
}
if secure {
fmt.Fprintf(&b, "; Secure")
}
} }
if !(len(others) > 4 && others[4].(bool) == false) { if len(others) > 4 {
fmt.Fprintf(&b, "; HttpOnly") if v, ok := others[4].(bool); ok && !v {
// HttpOnly = false
} else {
fmt.Fprintf(&b, "; HttpOnly")
}
} }
output.Context.ResponseWriter.Header().Add("Set-Cookie", b.String()) output.Context.ResponseWriter.Header().Add("Set-Cookie", b.String())
} }