Rumah pembangunan bahagian belakang tutorial php phpcms微博登陆后,不要二次注册,出现会话过时的详解

phpcms微博登陆后,不要二次注册,出现会话过时的详解

Mar 31, 2017 pm 03:37 PM

phpcms微博登陆后,不要二次注册,出现会话过时,
思路是 微博登录后,直接把用户昵称等写入数据库,
然后再执行一次,判断是否注册过,但是提示登录成功之后,总提示一次会话过期.再次登录后正常.
代码有点长,麻烦看下.

1354.png

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

public function public_sina_login() {

        define('WB_AKEY', pc_base::load_config('system', 'sina_akey'));

        define('WB_SKEY', pc_base::load_config('system', 'sina_skey'));

        define('WEB_CALLBACK', APP_PATH.'index.php?m=member&c=index&a=public_sina_login&callback=1');

        pc_base::load_app_class('saetv2.ex', '' ,0);

        $this->_session_start();

 

        if(isset($_GET['callback']) && trim($_GET['callback'])) {

            $o = new SaeTOAuthV2(WB_AKEY, WB_SKEY);

            if (isset($_REQUEST['code'])) {

                $keys = array();

                $keys['code'] = $_REQUEST['code'];

                $keys['redirect_uri'] = WEB_CALLBACK;

                try {

                    $token = $o->getAccessToken('code', $keys);

                } catch (OAuthException $e) {

                }

            }

            if ($token) {

                $_SESSION['token'] = $token;

            }

            $c = new SaeTClientV2(WB_AKEY, WB_SKEY, $_SESSION['token']['access_token'] );

            $ms  = $c->home_timeline(); // done

            $uid_get = $c->get_uid();

            $uid = $uid_get['uid'];

            $me = $c->show_user_by_id( $uid);//根据ID获取用户等基本信息

            if(CHARSET != 'utf-8') {

                $me['name'] = iconv('utf-8', CHARSET, $me['name']);

                $me['location'] = iconv('utf-8', CHARSET, $me['location']);

                $me['description'] = iconv('utf-8', CHARSET, $me['description']);

                $me['screen_name'] = iconv('utf-8', CHARSET, $me['screen_name']);

            }

            if(!empty($me['id'])) {

                //检查connect会员是否绑定,已绑定直接登录,未绑定提示注册/绑定页面

                $where = array('connectid'=>$me['id'], 'from'=>'sina');

                $r = $this->db->get_one($where);

 

                //connect用户已经绑定本站用户

                if(!empty($r)) {

                    //读取本站用户信息,执行登录操作

 

                    $password = $r['password'];

                    $this->_init_phpsso();

                    $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);

                    $userid = $r['userid'];

                    $groupid = $r['groupid'];

                    $username = $r['username'];

                    $nickname = empty($r['nickname']) ? $username : $r['nickname'];

                    $this->db->update(array('lastip'=>ip(), 'lastdate'=>SYS_TIME, 'nickname'=>$me['name']), array('userid'=>$userid));

 

                    if(!$cookietime) $get_cookietime = param::get_cookie('cookietime');

                    $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);

                    $cookietime = $_cookietime ? TIME + $_cookietime : 0;

 

                    $phpcms_auth = sys_auth($userid."\t".$password, 'ENCODE', get_auth_key('login'));

 

                    param::set_cookie('auth', $phpcms_auth, $cookietime);

                    param::set_cookie('_userid', $userid, $cookietime);

                    param::set_cookie('_username', $username, $cookietime);

                    param::set_cookie('_groupid', $groupid, $cookietime);

                    param::set_cookie('cookietime', $_cookietime, $cookietime);

                    param::set_cookie('_nickname', $nickname, $cookietime);

                    $forward = isset($_GET['forward']) && !empty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index';

                        showmessage(L('login_success').$synloginstr, $forward);

 

                } else {

                    //弹出绑定注册页面

                    $_SESSION = array();

                    $_SESSION['connectid'] = $me['id'];

                    $_SESSION['from'] = 'sina';

                    $connect_username = $me['name'];

                    //SELECT max(userid) maxid FROM user

 

                    $where="SELECT MAX(phpssouid) maxid FROM `v9_member` WHERE 1";

                    $info = $this->db->query($where);

                    $row = mysql_fetch_object($info);

                        //  $row =Myspl_fetch_array($info,MYSQL_NUM);

                    $maxid = $row->maxid;

                    $phpssouid = $maxid+1;

 

                    //写入数据库

                    $this->db->insert(array('nickname'=>$me['name'],'regip'=>ip(),'regdate'=>SYS_TIME,'img'=>$me['avatar_large'],'phpssouid'=>$phpssouid,'password'=>'','groupid' =>'2','lastdate'=>SYS_TIME, 'lastip'=>ip(),'connectid'=>$me['id'],'from'=>'sina'));

 

                    //加载用户模块配置

                    $member_setting = getcache('member_setting');

                    if(!$member_setting['allowregister']) {

                        showmessage(L('deny_register'), 'index.php?m=member&c=index&a=login');

                    }

 

 

                    //获取用户siteid

                    $siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1;

                    //过滤非当前站点会员模型

                    $modellist = getcache('member_model', 'commons');

                    foreach($modellist as $k=>$v) {

                        if($v['siteid']!=$siteid || $v['disabled']) {

                            unset($modellist[$k]);

                        }

                    }

                    if(empty($modellist)) {

                        showmessage(L('site_have_no_model').L('deny_register'), HTTP_REFERER);

                    }

 

                    $modelid = 10; //设定默认值

                    if(array_key_exists($modelid, $modellist)) {

                        //获取会员模型表单

                        require CACHE_MODEL_PATH.'member_form.class.php';

                        $member_form = new member_form($modelid);

                        $this->db->set_model($modelid);

                        $forminfos = $forminfos_arr = $member_form->get();

 

                        //万能字段过滤

                        foreach($forminfos as $field=>$info) {

                            if($info['isomnipotent']) {

                                unset($forminfos[$field]);

                            } else {

                                if($info['formtype']=='omnipotent') {

                                    foreach($forminfos_arr as $_fm=>$_fm_value) {

                                        if($_fm_value['isomnipotent']) {

                                            $info['form'] = str_replace('{'.$_fm.'}',$_fm_value['form'], $info['form']);

                                        }

                                    }

                                    $forminfos[$field]['form'] = $info['form'];

                                }

                            }

                        }

 

                        //$formValidator = $member_form->formValidator;

 

 

 

                        //zaizai再次调用

                        define('WB_AKEY', pc_base::load_config('system', 'sina_akey'));

                        define('WB_SKEY', pc_base::load_config('system', 'sina_skey'));

                        define('WEB_CALLBACK', APP_PATH.'index.php?m=member&c=index&a=public_sina_login&callback=1');

                        pc_base::load_app_class('saetv2.ex', '' ,0);

                        $this->_session_start();

                            $o = new SaeTOAuthV2(WB_AKEY, WB_SKEY);

                            if (isset($_REQUEST['code'])) {

                                $keys = array();

                                $keys['code'] = $_REQUEST['code'];

                                $keys['redirect_uri'] = WEB_CALLBACK;

                                try {

                                    $token = $o->getAccessToken('code', $keys);

                                } catch (OAuthException $e) {

                                }

                            }

                            if ($token) {

                                $_SESSION['token'] = $token;

                            }

                            $c = new SaeTClientV2(WB_AKEY, WB_SKEY, $_SESSION['token']['access_token'] );

                            $ms  = $c->home_timeline(); // done

                            $uid_get = $c->get_uid();

                            $uid = $uid_get['uid'];

                            $me = $c->show_user_by_id( $uid);//根据ID获取用户等基本信息

                            if(CHARSET != 'utf-8') {

                                $me['name'] = iconv('utf-8', CHARSET, $me['name']);

                                $me['location'] = iconv('utf-8', CHARSET, $me['location']);

                                $me['description'] = iconv('utf-8', CHARSET, $me['description']);

                                $me['screen_name'] = iconv('utf-8', CHARSET, $me['screen_name']);

                            }

                            if(!empty($me['id'])) {

                                //检查connect会员是否绑定,已绑定直接登录,未绑定提示注册/绑定页面

//                              $where = array('connectid' => $me['id'], 'from' => 'sina');

//                              $r = $this->db->get_one($where);

 

                                $where = " SELECT * FROM `phpcms`.`v9_member` WHERE `connectid` = ".$me['id']." AND `from` = 'sina' LIMIT 1 ";

                                $r = $this->db->query($where);

 

 

 

                                //connect用户已经绑定本站用户

                                if (!empty($r)) {

                                    //读取本站用户信息,执行登录操作

 

                                    $password = $r['password'];

                                    $this->_init_phpsso();

                                    $synloginstr = $this->client->ps_member_synlogin($r['phpssouid']);

                                    $userid = $r['userid'];

                                    $groupid = $r['groupid'];

                                    $username = $r['username'];

                                    $nickname = empty($r['nickname']) ? $username : $r['nickname'];

                                    //$this->db->update(array('lastip' => ip(), 'lastdate' => SYS_TIME, 'nickname' => $me['name']), array('userid' => $userid));

 

                                    if (!$cookietime) $get_cookietime = param::get_cookie('cookietime');

                                    $_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);

                                    $cookietime = $_cookietime ? TIME + $_cookietime : 0;

 

                                    $phpcms_auth = sys_auth($userid . "\t" . $password, 'ENCODE', get_auth_key('login'));

 

                                    param::set_cookie('auth', $phpcms_auth, $cookietime);

                                    param::set_cookie('_userid', $userid, $cookietime);

                                    param::set_cookie('_username', $username, $cookietime);

                                    param::set_cookie('_groupid', $groupid, $cookietime);

                                    param::set_cookie('cookietime', $_cookietime, $cookietime);

                                    param::set_cookie('_nickname', $nickname, $cookietime);

                                    $forward = isset($_GET['forward']) && !empty($_GET['forward']) ? $_GET['forward'] : 'index.php?m=member&c=index';

                                    showmessage(L('login_success') . $synloginstr, $forward);

 

                                }

 

                            }

 

 

                    }

                    include template('member', 'connect');

                }

            } else {

                showmessage(L('login_failure'), 'index.php?m=member&c=index&a=login');

            }

        } else {

            $o = new SaeTOAuthV2(WB_AKEY, WB_SKEY);

            $aurl = $o->getAuthorizeURL(WEB_CALLBACK);

            include template('member', 'connect_sina');

        }

    }

Salin selepas log masuk

回复内容:

会话过期 你是在那一行代码判断的?

我没去判断,我用的他自带的代码
思路是:
默认是判断  一次       //检查connect会员是否绑定,已绑定直接登录,未绑定提示注册/绑定页面

如果已经绑定,则直接登录,
没绑定,我会在写入数据库后,在调用一次判断(就是把判断的代码在复制过来一次,),这时候应该已经绑定了,他还是会在提示一次回话过期呢...  

 以上就是phpcms微博登陆后,不要二次注册,出现会话过时的详解的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Muzium Dua Point: Semua Pameran dan Di Mana Mencari Mereka
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah rangka kerja phpcms? Apakah rangka kerja phpcms? Apr 20, 2024 pm 10:51 PM

PHP CMS ialah sistem pengurusan kandungan sumber terbuka berasaskan PHP untuk mengurus kandungan tapak web Ciri-cirinya termasuk kemudahan penggunaan, kefungsian berkuasa, berskala, keselamatan tinggi dan sumber terbuka percuma. Ia boleh menjimatkan masa, meningkatkan kualiti laman web, meningkatkan kerjasama dan mengurangkan kos pembangunan, dan digunakan secara meluas dalam pelbagai laman web seperti laman web berita, blog, laman web korporat, laman web e-dagang dan forum komuniti.

Bagaimana untuk melompat ke halaman butiran dalam phpcms Bagaimana untuk melompat ke halaman butiran dalam phpcms Jul 27, 2023 pm 05:23 PM

Bagaimana untuk melompat ke halaman butiran dalam phpcms: 1. Gunakan fungsi pengepala untuk menjana pautan lompat;

Panduan Integrasi Log Masuk WeChat: Pertempuran Praktikal PHPCMS Panduan Integrasi Log Masuk WeChat: Pertempuran Praktikal PHPCMS Mar 29, 2024 am 09:18 AM

Tajuk: Panduan Integrasi Log Masuk WeChat: PHPCMS dalam Tindakan Dalam era Internet hari ini, log masuk sosial telah menjadi salah satu fungsi penting laman web. Sebagai salah satu platform sosial yang paling popular di China, fungsi log masuk WeChat juga digunakan oleh semakin banyak laman web. Artikel ini akan memperkenalkan cara untuk mengintegrasikan fungsi log masuk WeChat dalam tapak web PHPCMS dan memberikan contoh kod khusus. Langkah 1: Daftar Akaun Platform Terbuka WeChat Pertama, kita perlu mendaftar akaun pembangun pada Platform Terbuka WeChat dan memohon kebenaran pembangunan yang sepadan. Log masuk [WeChat open platform]

Apakah maksud phpcms? Apakah maksud phpcms? Apr 20, 2024 pm 10:39 PM

PHPCMS ialah sistem pengurusan kandungan (CMS) percuma dan sumber terbuka yang menampilkan: sumber terbuka, modulariti, fleksibiliti, mesra pengguna dan sokongan komuniti. Ia boleh digunakan untuk mencipta pelbagai jenis tapak web, termasuk tapak web korporat, tapak web e-dagang, blog dan forum komuniti. Keperluan teknikal termasuk: PHP 5.6 atau lebih tinggi, pangkalan data MySQL, MariaDB atau PostgreSQL dan pelayan web Apache atau Nginx.

2023年最新phpcms视频教程推荐(二次开发必学) 2023年最新phpcms视频教程推荐(二次开发必学) Oct 25, 2019 pm 03:45 PM

很多站长使用PHPCMS进行二次开发建站,PHP中文网特意推出了phpcms视频教程,大家可以随时随地免费观看视频教程,不需要从百度网盘下载,非常方便。

Bagaimana untuk melaksanakan log masuk WeChat dalam phpcms Bagaimana untuk melaksanakan log masuk WeChat dalam phpcms Mar 09, 2023 am 09:33 AM

Cara melaksanakan log masuk WeChat dalam phpcms: 1. Buat "wechat.php" baharu dalam direktori akar 2. Tambah "public function wechat() {...}" di bawah "\phpcms\modules\member\index.php; "; 3. . Hanya gunakan fungsi wechat dalam fail "foreground.class.php" untuk menentukan sama ada pengguna telah log masuk.

Pangkalan data apa yang digunakan oleh phpcms? Pangkalan data apa yang digunakan oleh phpcms? Feb 21, 2023 pm 06:57 PM

phpcms menggunakan pangkalan data mysql. phpcms ialah sistem pengurusan laman web sumber terbuka PHP, dibangunkan menggunakan PHP+MYSQL sebagai asas teknikal. PHPCMS V9 menggunakan kaedah OOP untuk membina rangka kerja operasi asas Versi PHP yang disokong ialah PHP5 dan ke atas, dan versi MYSQL yang disokong ialah MySql 4.1 dan ke atas.

Bagaimana untuk menukar nama tapak dalam phpcms Bagaimana untuk menukar nama tapak dalam phpcms Feb 24, 2023 am 09:29 AM

Cara mengubah suai nama tapak dalam phpcms: 1. Gunakan pentadbir untuk log masuk ke halaman bahagian belakang 2. Cari pilihan "Tetapan" di bar menu atas dan klik padanya, kemudian cari "Pengurusan Tapak" dalam menu pada bahagian; kiri; 3. Cari item yang perlu diubah suai Tapak, klik pautan ubah suai di sebelah kanan nama domain tapak 4. Ubah suai nama tapak dalam tetingkap timbul.

See all articles