{"id":362597,"date":"2026-09-07T06:40:48","date_gmt":"2026-09-07T06:40:48","guid":{"rendered":"https:\/\/cn.wordpress.org\/plugins\/prevent-account-sharing\/"},"modified":"2026-09-07T06:40:24","modified_gmt":"2026-09-07T06:40:24","slug":"east115-account-guard","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/east115-account-guard\/","author":23559020,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.1","stable_tag":"1.2.1","tested":"7.1","requires":"5.2","requires_php":"7.2","requires_plugins":null,"header_name":"east115 Account Guard","header_author":"east115","header_description":"Limit one account to real owners \u2014 stop account sharing on membership sites with kick-oldest, device binding, and concurrent-login denial. \/ \u9650\u5236\u540c\u4e00\u8d26\u6237\u88ab\u591a\u4eba\u5171\u4eab\u4f7f\u7528\uff1a\u8e22\u65e7\u7559\u65b0\u3001\u8bbe\u5907\u6570\u91cf\u7ed1\u5b9a\u3001\u5e76\u53d1\u62d2\u7edd\u4e09\u79cd\u7b56\u7565\u3002\u9002\u7528\u4e8e\u4f1a\u5458\u4ed8\u8d39\u7ad9\u70b9\u3002","assets_banners_color":"56585f","last_updated":"2026-09-07 06:40:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":26,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.1":{"tag":"1.2.1","author":"east115","date":"2026-09-07 06:40:24","revision":3684293}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon.svg":{"filename":"icon.svg","revision":3684293,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3684405,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3684405,"resolution":"772x250","location":"assets","locale":"","width":770,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[4553,279510,602,1932,600],"plugin_category":[38,54,58],"plugin_contributors":[279511],"plugin_business_model":[],"class_list":["post-362597","plugin","type-plugin","status-publish","hentry","plugin_tags-concurrent-login","plugin_tags-device-binding","plugin_tags-login","plugin_tags-membership","plugin_tags-security","plugin_category-authentication","plugin_category-security-and-spam-protection","plugin_category-user-management","plugin_contributors-east115","plugin_committers-east115"],"banners":{"banner":"https:\/\/ps.w.org\/east115-account-guard\/assets\/banner-772x250.jpg?rev=3684405","banner_2x":"https:\/\/ps.w.org\/east115-account-guard\/assets\/banner-1544x500.jpg?rev=3684405","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/east115-account-guard\/assets\/icon.svg?rev=3684293","icon":"https:\/\/ps.w.org\/east115-account-guard\/assets\/icon.svg?rev=3684293","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Membership sites lose revenue every day to shared accounts \u2014 one login passed around an office, posted in a group chat, or resold. This plugin limits account sharing using WordPress native session management (WP_Session_Tokens). No polling, no extra server load.<\/p>\n\n<p>Three configurable strategies:<\/p>\n\n<ul>\n<li><strong>Kick oldest (kick, default)<\/strong> \u2014 a new login instantly terminates all other sessions of that account. The old device is logged out on its next request. Smoothest experience, similar to single-device streaming policies.<\/li>\n<li><strong>Exclusive online (deny)<\/strong> \u2014 while any device is active, new-device logins are rejected outright. Strictest mode.<\/li>\n<li><strong>Device binding limit<\/strong> \u2014 each account can bind up to N devices (default 2), slots auto-release after X days (default 30). An anonymous device identifier cookie is set on first login.<\/li>\n<\/ul>\n\n<p>More features:<\/p>\n\n<ul>\n<li>Heartbeat detection: every visit refreshes activity time (60-second write throttle, no slowdown)<\/li>\n<li>Admin exemption: administrators can bypass all restrictions<\/li>\n<li>Unbind tool: one click in the admin to clear a user's device bindings and force all devices offline \u2014 perfect for device-change appeals<\/li>\n<li>Zero external dependencies: no third-party requests, all data stays in your database<\/li>\n<\/ul>\n\n<p>The plugin interface is written in Chinese and fully internationalized (text domain: <code>east115-account-guard<\/code>). Translations for other languages are welcome via translate.wordpress.org.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin collects and transmits no personal data. The only data stored is an anonymous device-identifier cookie (<code>eastacgu_device<\/code>) in the browser and device binding timestamps in user meta. Uninstalling removes all settings and binding data.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload and activate the plugin in the admin.<\/li>\n<li>Go to Settings - Prevent Account Sharing, pick a strategy and device limit.<\/li>\n<li>To handle device-change appeals, use the unbind tool at the bottom of the settings page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"a%20member%20changed%20phones%20and%20is%20now%20locked%20out.%20what%20now%3F\"><h3>A member changed phones and is now locked out. What now?<\/h3><\/dt>\n<dd><p>Go to Settings - Prevent Account Sharing, enter the user's ID or login name in the unbind tool, and clear their bindings. They log in again on the new device.<\/p><\/dd>\n<dt id=\"does%20clearing%20browser%20cookies%20count%20as%20a%20new%20device%3F\"><h3>Does clearing browser cookies count as a new device?<\/h3><\/dt>\n<dd><p>Yes. The device identifier lives in a browser cookie; clearing cookies, switching browsers, or incognito mode all register as new devices. This is the intended anti-sharing behavior. Legitimate users can be unbound by an admin.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20set%20cookies%3F\"><h3>Does this plugin set cookies?<\/h3><\/dt>\n<dd><p>Yes. One anonymous cookie named <code>eastacgu_device<\/code> (random 32-character hex string, HttpOnly, one-year lifetime). It only distinguishes devices, contains no personal information, and is never sent to third parties.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>No. Heartbeat writes are throttled to once per 60 seconds per session; every check uses native WordPress sessions and user meta. No polling, no external requests.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Removed the Author URI header (connection to the site is restricted for some regions, which triggered a review error)<\/li>\n<li>Renamed all function\/class\/option\/menu prefixes from <code>pas_<\/code> to the unique <code>eastacgu_<\/code> prefix (previous prefix was too short and risked conflicts)<\/li>\n<li>Added automatic migration of settings, device bindings, and device cookies from versions 1.2.0 and earlier<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Renamed to a distinctive name and slug: east115 Account Guard \/ east115-account-guard<\/li>\n<li>Removed load_plugin_textdomain() \u2014 translations auto-load for WordPress.org-hosted plugins since WP 4.6<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added internationalization (i18n) \u2014 all strings translatable<\/li>\n<li>Added uninstall cleanup (uninstall.php)<\/li>\n<li>Added plugin header metadata<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: kick-oldest, device binding limit, concurrent denial, heartbeat detection, admin exemption, admin unbind tool<\/li>\n<\/ul>","raw_excerpt":"Limit one account to real owners. Stop account sharing on membership sites.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/362597","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=362597"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/east115"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=362597"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=362597"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=362597"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=362597"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=362597"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=362597"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}