我已經將Windows Session建置到Redis了,不過解決辦法跟配置今天可能沒辦法一次打完,
因為本次參賽是沒有事先將文章都打好,是每天花一點點時間來為大家實作測試+Demo介紹
請各位見諒,最近的事情挺多的感覺好累...
public String doLogin(@ModelAttribute MemberAccountJPA memberAccountJPA,HttpSession session){
我們只要在Controller對應的方法內增加HttpSession session
變可以得到使用者的session且設置session的屬性
當使用者帳號密碼查詢出來是一致的沒有錯誤
並可以使用setAttribute方法將object存入session中
ex:
session.setAttribute("uid", memberAccount); //將memberAccount object存入session命名為uid
如果要登出的話我們只要先判斷
uid是否為空值,如果不為null我們再將她的session刪除即可完成登出的功能
ex:
if(session.getAttribute("uid")!=null){
session.removeAttribute(uid);
}
剩下的有空會補
session與Cookie是為了在HTTP協定上維持會話的狀態,好比說公司員工進到公司需要有員工證當一個識別的身分,
那http協定上要如何識別一個使用者的身分?
如此session與Cookie技術就此誕生了
session是服務器端的就是我們的Server端,存放在一種散列表的結構來保存訊息,當使用者登入的時候我們伺服器端會去尋找這個人的身分有無符合存放在我們伺服器端的資訊,如果他並沒有進行登入過的狀態則我們必須要求他做登入帳號密碼的認證
Cookie (小甜餅? 有點特別吧XD),Cookie是將資料儲存於客戶端,在客戶端訪問了某個URL後,伺服器端在header中設定了此 Set-Cookie HTTP Header的資訊,而瀏覽器則會將此訊息紀錄在瀏覽器的Cookie存放區,他會記住Cookie的隸屬網路,名稱,時間等訊息
當使用者在次的請求URL時,Server就會查看你的Cookie有無過期,通常應用在網路檔案的傳輸上非常實用,我們伺服器端可以知道是否要再重新將所有檔案傳送給使用者,如果每一次瀏覽內容都要將網站內的js,css,image都在重新傳送一次那效能不是會很好的
加入 spring-session-data-redis依賴
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
# REDIS (RedisProperties)
# Redis資料庫索引(默認配置為0)
spring.redis.database=0
# Redis伺服器host
spring.redis.host=localhost
# Redis伺服器Port接口
spring.redis.port=6379
# Redis伺服器密碼默認為0可在redis.windows.conf依照自行需求添加
spring.redis.password=
# 連接持最大限制(pool)
spring.redis.pool.max-active=8
# 連接池最大阻塞時間(負數沒有限制)
spring.redis.pool.max-wait=-1
# 連接池最大空間
spring.redis.pool.max-idle=8
# 連接池最小閒置空間
spring.redis.pool.min-idle=0
# timeout(毫秒)
spring.redis.timeout=0
在com.tutorial package建立一個class
package com.tutorial;
import org.springframework.context.annotation.Configuration;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
public class RedisSessionConfig {
}
1.加入HttpSession session
2.session.setAttribute("uid", memberAccount);
@PostMapping("/doLogin")
public String doLogin(@ModelAttribute MemberAccountJPA memberAccountJPA,HttpSession session){
String email = memberAccountJPA.getEmail();
String password = memberAccountJPA.getPassword();
List<MemberAccountJPA> MemberAccountJPAList = new ArrayList<MemberAccountJPA>();
MemberAccountJPAList = memberRepository.findCheckMemberAccount(email, password);
MemberAccount memberAccount = new MemberAccount();
memberAccount.setPassword(password);
memberAccount.setEmail(email);;
if(MemberAccountJPAList.size()==0){
return "login";
}
else{
session.setAttribute("uid", memberAccount);
return "welcome";
}
}
下keys 'sessions'指令
1.上集會補Windows安裝Redis步驟及問題排除
2.這集介紹配置
(https://www.cnblogs.com/ityouknow/p/5748830.html ) Spring Boot redis session配置
需要加入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
输入
keys '*sessions*'
session.setAttribute("uid", memberAccount);
System.out.println("進入的人:"+session.getId());
login登入後spring 有印出getid()
但是在redis-cli 內用key "sessions" 卻呈現empty
請問該如何解決
確認過阜6379 Redis-server有開啟
keys 'sessions'