微信小程序存储session代码
时间: 2023-09-15 15:23:09 浏览: 84
微信小程序中可以使用 wx.setStorageSync 和 wx.getStorageSync 方法来进行本地数据的存储和读取。
具体操作如下:
1. 存储 session
```javascript
wx.setStorageSync('session', 'your_session_id');
```
2. 获取 session
```javascript
var session = wx.getStorageSync('session');
if (session) {
// 已经登录
} else {
// 未登录
}
```
注意:微信小程序中 wx.setStorageSync 和 wx.getStorageSync 方法只能存储和读取字符串类型的数据,如果需要存储对象或数组等类型的数据,需要使用 JSON.stringify 和 JSON.parse 进行转换。例如:
```javascript
var obj = { name: '小明', age: 18 };
wx.setStorageSync('userInfo', JSON.stringify(obj));
var userInfo = JSON.parse(wx.getStorageSync('userInfo'));
console.log(userInfo.name); // 小明
console.log(userInfo.age); // 18
```
相关问题
微信小程序存储session
微信小程序中可以使用 wx.setStorageSync 和 wx.getStorageSync 方法来存储和获取 session。具体步骤如下:
1. 在登录成功后,获取到用户的 session 信息,可以通过 wx.login 方法获取到登录凭证 code。
2. 将 code 发送给后端服务器,后端服务器通过 code 向微信服务器获取到 session_key 和 openid 等信息。
3. 将获取到的 session_key 和 openid 存储在客户端的 storage 中,可以使用 wx.setStorageSync 方法进行同步存储。
4. 在后续请求中,需要将 session_key 和 openid 发送给后端服务器进行身份验证,可以通过 wx.getStorageSync 方法获取存储在客户端的 session_key 和 openid。
需要注意的是,存储在客户端的 session_key 需要定期更新,否则存在被盗用的风险。可以通过后端服务器定期更新 session_key 并通知客户端进行更新。
用php代码和数据库实现微信小程序注册于登录功能的具体代码包括微信小程序中的代码
首先是微信小程序端的代码,在 `app.js` 中定义了一个全局变量 `sessionKey`,用于存储用户的 session key:
```javascript
App({
globalData: {
sessionKey: ''
},
onLaunch: function () {
// ...
}
})
```
在登录页面 `login.js` 中,使用 `wx.login` 获取用户的 code,并将 code 发送到服务器端:
```javascript
// 点击登录按钮时触发
onLogin: function () {
var that = this;
wx.login({
success: function (res) {
if (res.code) {
wx.request({
url: 'https://example.com/login.php',
method: 'POST',
data: {
code: res.code
},
success: function (res) {
if (res.data.code == 0) {
// 登录成功,保存 session key
getApp().globalData.sessionKey = res.data.sessionKey;
wx.showToast({
title: '登录成功'
})
} else {
// 登录失败
wx.showModal({
title: '登录失败',
content: res.data.msg
})
}
}
})
} else {
wx.showModal({
title: '登录失败',
content: '获取用户登录状态失败:' + res.errMsg
})
}
}
})
}
```
在注册页面 `register.js` 中,将用户输入的用户名和密码发送到服务器端进行注册:
```javascript
// 点击注册按钮时触发
onRegister: function () {
var that = this;
wx.request({
url: 'https://example.com/register.php',
method: 'POST',
data: {
username: that.data.username,
password: that.data.password
},
success: function (res) {
if (res.data.code == 0) {
wx.showToast({
title: '注册成功'
})
} else {
wx.showModal({
title: '注册失败',
content: res.data.msg
})
}
}
})
}
```
接下来是服务器端的 PHP 代码。首先,在 `login.php` 中,通过 `wx.login` 接口向微信服务器发送请求,获取到 session key 和 openid,并将 session key 存储到数据库中:
```php
<?php
// 连接数据库
$host = "localhost";
$username = "root";
$password = "123456";
$dbname = "test";
$conn = mysqli_connect($host, $username, $password, $dbname);
// 获取 POST 数据
$code = $_POST["code"];
// 向微信服务器发送请求,获取 session key 和 openid
$appid = "wx123456";
$secret = "abcdefg";
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code";
$result = file_get_contents($url);
$json = json_decode($result);
if (!isset($json->session_key)) {
echo json_encode(array("code" => 1, "msg" => "Failed to get session key"));
exit;
}
$session_key = $json->session_key;
$openid = $json->openid;
// 判断用户是否已注册
$sql = "SELECT * FROM users WHERE openid = '$openid'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) == 0) {
// 用户未注册,插入新用户
$sql = "INSERT INTO users (openid) VALUES ('$openid')";
mysqli_query($conn, $sql);
}
// 插入或更新 session
$user_id = mysqli_insert_id($conn) ?: mysqli_fetch_assoc($result)["id"];
$expire_time = time() + 86400; // 过期时间为一天后
$sql = "INSERT INTO sessions (user_id, session_key, expire_time) VALUES ($user_id, '$session_key', $expire_time) ON DUPLICATE KEY UPDATE session_key = '$session_key', expire_time = $expire_time";
mysqli_query($conn, $sql);
// 返回 session key
echo json_encode(array("code" => 0, "sessionKey" => $session_key));
?>
```
在 `register.php` 中,将用户输入的用户名和密码插入到数据库中:
```php
<?php
// 连接数据库
$host = "localhost";
$username = "root";
$password = "123456";
$dbname = "test";
$conn = mysqli_connect($host, $username, $password, $dbname);
// 获取 POST 数据
$username = $_POST["username"];
$password = $_POST["password"];
// 判断用户名是否已存在
$sql = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
echo json_encode(array("code" => 1, "msg" => "Username already exists"));
exit;
}
// 插入新用户
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$sql = "INSERT INTO users (username, password) VALUES ('$username', '$hashed_password')";
mysqli_query($conn, $sql);
echo json_encode(array("code" => 0));
?>
```
需要注意的是,由于小程序端无法直接访问该 PHP 文件,因此需要在服务器端配置 SSL 证书,并将域名绑定到该 SSL 证书上。然后,在小程序端使用 HTTPS 协议访问该域名即可。如果没有 SSL 证书,可以使用第三方服务商提供的免费 SSL 证书。
阅读全文